[英]java vm: how to log class unloading
我在这里找不到 SO 和通过 web 搜索工作方式,以使用 Java VM(JVM)的参数来记录 class 卸载。
Here http://www.herongyang.com/JVM/ClassLoader-JVM-Option-verbose-class.html advised to call java -verbose:class -version
, but it is said for loading and it gave log for loading only.
在Java 热点虚拟机选项上:
-XX:-TraceClassUnloading 跟踪类的卸载。 -XX:-TraceClassLoading 跟踪类的加载。
java -XX:-TraceClassUnloading -version
输出没有关于类的信息:
[0.004s][warning][arguments] -XX:-TraceClassUnloading is deprecated. Will use -Xlog:class+unload=off instead.
java version "13" 2019-09-17
Java(TM) SE Runtime Environment (build 13+33)
Java HotSpot(TM) 64-Bit Server VM (build 13+33, mixed mode, sharing)
和:
java -XX:-TraceClassLoading -version
[0.002s][warning][arguments] -XX:-TraceClassLoading is deprecated. Will use -Xlog:class+load=off instead.
java version "13" 2019-09-17
Java(TM) SE Runtime Environment (build 13+33)
Java HotSpot(TM) 64-Bit Server VM (build 13+33, mixed mode, sharing)
一样。
附带问题:不推荐使用的词意味着气馁,而不是不再工作,为什么会有这种行为?
但是对于 class 加载java -Xlog:class+load -version
输出信息例如
[0.037s][info][class,load] java.nio.CharBuffer source: shared objects file
[0.037s][info][class,load] java.nio.HeapCharBuffer source: shared objects file
[0.037s][info][class,load] java.nio.charset.CoderResult source: shared objects file
但是java -Xlog:class+unload -version
只有版本信息。
如何获取 Java VM HotSpot(和/或 OpenJDK)的 class 卸载日志?
你这么说
java -XX:-TraceClassUnloading -version
不输出关于类的信息。 但我不知道为什么会期望它提供信息。
如果 JVM 已启动并且类已加载和卸载,您只会看到日志记录:
-version
选项的文档说:
-version
显示版本信息然后退出。
并不是说启动了 JVM。
假设启动 JVM 并加载类,则在正常的 Java 应用程序中不会卸载类。 Class 卸载仅在以下情况下发生:
简而言之,您(曾经)很可能没有看到任何卸载日志消息,因为没有(正在)卸载任何类。
1 - class 与其类加载器之间有双向链接,从 class 的任何实例到 class 本身的单向链接。 结果之一是引导类加载器和应用程序类加载器将在 JVM 的生命周期内保持可访问。
2 - GC 通常只在必要时运行; 即当堆利用率达到某个阈值时。 当 JVM 退出时,它不会自动运行。
3 - GC 的单次运行不一定会找到所有无法访问的对象。
4 - 一些 JVM / GC 不支持 class 卸载,并且可以通过命令行选项禁用(或可能需要启用)此功能。
如果有人正在寻找如何记录 class 卸载?
添加JVM 参数-Xlog:class+load=info
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.