如何跟踪在jvm中加载和销毁类的时间?

Jyo*_*rup 22 java jvm

如何在jvm中加载和销毁类时跟踪?有没有jvm公开的回调方法?

Dan*_*ruz 24

如果您使用的是Sun/Oracle JVM,则可以使用TraceClassLoadingTraceClassUnloading选项.使用以下命令查看JVM支持的选项:

java -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version
Run Code Online (Sandbox Code Playgroud)

如果支持这些选项,请使用运行Java应用程序-XX:+TraceClassLoading -XX:+TraceClassUnloading.您应该看到以下消息:

[Loaded ... from ...]
[Unloading class ...]
Run Code Online (Sandbox Code Playgroud)


rsp*_*rsp 8

您可以将命令行选项 添加-verbose:class到Java进程,这将显示有关每个已加载类的信息.


Pau*_*Wee 6

您可以添加Java Opts以查看通过以下方式加载的类:

java -verbose:class
Run Code Online (Sandbox Code Playgroud)

关于被摧毁的课程,我不确定.


Jor*_*nee 5

从 Java 9 开始,您可以使用-Xlog. 例如:

java -Xlog:class+load -Xlog:class+unload ...
Run Code Online (Sandbox Code Playgroud)

这将打印如下条目:

[0.296s][info][class,load] java.lang.Shutdown source: jrt:/java.base
[0.296s][info][class,load] java.lang.Shutdown$Lock source: jrt:/java.base
Run Code Online (Sandbox Code Playgroud)

您还可以使用-Xlog:help来获取有关该选项的更多信息。


Luc*_*uca 1

您可以使用静态块来检测类加载,但无法检测类卸载。在java中,所有通过系统类加载器加载的类都不会被卸载,所有通过其他类加载器加载的类只有在类加载器卸载时才会被卸载。

static{ 

        //execute when the class will be loaded

    }
Run Code Online (Sandbox Code Playgroud)