jvm java vm:如何记录类卸载

quhf5bfb  于 2022-11-07  发布在  Java
关注(0)|答案(2)|浏览(144)

我无法在SO上找到这里,也无法通过Web搜索工作方式使用Java VM(JVM)的参数来记录类卸载。
这里http://www.herongyang.com/JVM/ClassLoader-JVM-Option-verbose-class.html建议调用java -verbose:class -version,但它说是加载,它只给加载日志。
Java HotSpot VM Options上:
-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)

一样的东西。
一边问:“不赞成”这个词的意思是气馁,不是不再工作,为什么这样的行为?
然而,对于类加载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)的类卸载日志?

i86rm4rw

i86rm4rw1#

你这么说

java -XX:-TraceClassUnloading -version

不输出任何关于类的信息。但我不知道为什么会 * 期望 * 它提供信息。
只有在JVM已启动且类已加载和卸载时,才会看到日志记录:

  • -version选项的文档说明:

-version显示版本信息然后退出。
它并不表示JVM已启动。
拆下-version/

  • 从Java 9开始,-XX:-TraceClassUnloading已被弃用。您可以将其替换为-Xlog:class+load=info

1.假设JVM已启动,且已载入类别,则在一般Java应用程序中不会卸载类别。只有在下列情况下才会发生类别卸载:
1.创建了一个附加的类加载器,并且
1.该类加载器用于加载类,并且
1.这些类和类加载器 * 全部 * 都变得不可访问1,并且

  1. GC运行2,并且
  2. GC检测到类不可访问2并卸载4它们。
    简而言之,您很可能不会看到任何卸载日志消息,因为没有类正在被卸载。
    一边问:“不赞成”一词的意思是气馁,不是不再工作,为什么会有这样的行为?
    因为他们决定改变JVM日志记录选项的工作方式。参见https://openjdk.java.net/jeps/158
    -XX选项可能会更改。请查看手册以了解当前选项所使用的Java版本。更改(功能弃用和删除)也应在相关发行说明中提及。
    linked to的JVM选项页面以粗体显示:
  • “请注意,此页仅适用于JDK 7和更早版本。"*

1 -类和它的类加载器之间有双向链接,类的任何示例和类本身之间有单向链接。一个结果是引导类加载器和应用程序类加载器在JVM的生命周期内保持可访问。
2 -GC通常仅在必要时运行;即当堆利用率达到某个阈值时。它不会在JVM退出时自动运行。
3 -GC的一次运行不一定会找到所有不可访问的对象。
4 -一些JVM/ GC不支持类卸载,可以通过命令行选项禁用(或可能需要启用)此特性。

anauzrmj

anauzrmj2#

如果有人要找怎样的日志类卸载?
添加JVM参数-Xlog:class+load=info

相关问题