[英]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.