簡體   English   中英

java vm:如何記錄 class 卸載

[英]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. 創建了一個額外的類加載器,並且
    2. 該類加載器用於加載類,並且
    3. 這些類和類加載器變得無法訪問1 ,並且
    4. GC 運行2 ,並且
    5. GC 檢測到類不可訪問2並卸載4個。

簡而言之,您(曾經)很可能沒有看到任何卸載日志消息,因為沒有(正在)卸載任何類。


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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM