gpt4 book ai didi

java虚拟机: how to log class unloading

转载 作者:行者123 更新时间:2023-11-30 01:44:43 26 4
gpt4 key购买 nike

我无法在 SO 上找到使用 Java VM (JVM) 参数来记录类卸载的 Web 搜索工作方式。

这里http://www.herongyang.com/JVM/ClassLoader-JVM-Option-verbose-class.html建议调用java -verbose:class -version,但据说是为了加载,并且只提供了加载日志。

关于Java HotSpot VM Options :

-XX:-TraceClassUnloading Trace unloading of classes. -XX:-TraceClassLoading Trace loading of classes.

java -XX:-TraceClassUnloading -version不输出有关类(class)的信息:

[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)的类卸载日志?

最佳答案

你说的是

java -XX:-TraceClassUnloading -version 

不输出有关类的信息。但我不知道为什么期望它提供信息。

只有在 JVM 启动并且类已加载和卸载时,您才会看到日志记录:

  • -version 选项的文档说道:

    -version Displays version information and then exits.

    它没有说 JVM 已启动。

    删除-版本/

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

  • 假设启动了 JVM,并且加载了类,则在正常的 Java 应用程序中不会卸载类。仅在以下情况下才会发生类卸载:

    1. 创建了一个额外的类加载器,并且
    2. 该类加载器用于加载类,并且
    3. 这些类和类加载器全部变得无法访问1,并且
    4. GC 运行2,并且
    5. GC 检测到这些类无法访问2 并卸载4 它们。

简而言之,您很可能没有看到任何卸载日志消息,因为没有类被卸载。

<小时/>

Side question: deprecated word means discouraged, not no-longer-working, why such behavior?

因为他们决定改变 JVM 日志记录选项的工作方式。 Java 9 中发生的更改:请参阅 https://openjdk.java.net/jeps/158 .

-XX 选项可能会发生变化。检查当前选项所使用的 Java 版本的手册。相关发行说明中还应提及更改(功能弃用和删除)。

有关 JVM 选项的页面您 linked to用粗体字表示:

"Please note that this page only applies to JDK 7 and earlier releases."

<小时/>

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

关于java虚拟机: how to log class unloading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58554688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com