如何记录 class 在 OpenJDK 17 上的加载位置? (无法识别的 VM 选项 'TraceClassLoading')

How to log where a class was loaded from on OpenJDK 17? (Unrecognized VM option 'TraceClassLoading')

使用 OpenJDK 8,-XX:+TraceClassLoading 标志记录从哪个 jar class 加载:

$ java -XX:+TraceClassLoading ...
[Loaded java.lang.Object from jdk1.8.0_202/jre/lib/rt.jar]

OpenJDK 17 及更新版本无法识别该标志:

$ java -XX:+TraceClassLoading ...
Unrecognized VM option 'TraceClassLoading'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

OpenJDK 17 的等效标志是什么?

对于 OpenJDK 9 及更新版本,传递 -Xlog:class+load=info 而不是 -XX:+TraceClassLoading:

$ java -Xlog:class+load=info ...
...
[info   ][class,load] java.lang.Object source: jrt:/java.base

OpenJDK 9 弃用了 -XX:+TraceClassLoading 并引入了新的 'Unified Logging Framework' (the -Xlog option) as part of JEP 158

对于 OpenJDK 9 到 15,如果通过 -XX:+TraceClassLoading,则会记录以下警告:

-XX:+TraceClassLoading is deprecated. Will use -Xlog:class+load=info instead.

从 OpenJDK 16 开始,该标志被忽略:

Ignoring option TraceClassLoading; support was removed in 16.0

从 OpenJDK 17 开始,该标志被拒绝。