java-verbose[:class|gc|jni] 在輸出設備上顯示虛擬機運行信息。
1.java-verbose:class
在程序運行的時候有多少類被加載!你可以用verbose:class來監視,
在命令行輸入java -verbose:class XXX (XXX爲程序名),你會在控制檯看到加載的類的情況。
verbose和verbose:class含義相同,輸出虛擬機裝入的類的信息,顯示的信息格式如下:
[OpenedD:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loadedjava.lang.Object from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loadedjava.io.Serializable from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loadedjava.lang.Comparable from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loadedjava.lang.CharSequence from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loadedjava.lang.String from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loadedjava.lang.reflect.GenericDeclaration from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loadedjava.lang.reflect.Type from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loadedjava.lang.reflect.AnnotatedElement from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loadedjava.lang.Class from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loadedjava.lang.Cloneable from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loadedjava.lang.ClassLoader from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loadedjava.lang.System from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
[Loadedjava.lang.Throwable from D:\Java\jdk1.6.0_25\jre\lib\rt.jar]
當虛擬機報告類找不到或類衝突時可用此參數來診斷來查看虛擬機裝入類的情況。
2.java–verbose:gc
在虛擬機發生內存回收時在輸出設備顯示信息,格式如下: [Full GC 256K->160K(124096K), 0.0042708 secs] 該參數用來監視虛擬機內存回收的情況。
publicclass JvmVerbose {
/**
* JVM-verbose[:class|gc|jni] 參數測試
* @paramargs
*/
publicstatic void main(String[] args) {
JvmVerbosejvmVerbose = new JvmVerbose();
System.gc();
}
}
在這個例子中,一個新的對象被創建,由於它沒有使用,所以該對象迅速地變爲可達,程序編譯後,執行命令: java -verbose:gc JvmVerbose 後結果爲:
[GC647K->256K(124096K), 0.0274253 secs]
[Full GC256K->160K(124096K), 0.0042708 secs]
箭頭前後的數據256K和160K分別表示垃圾收集GC前後所有存活對象使用的內存容量,說明有256K-160K=96K的對象容量被回收,括號內的數據124096K爲堆內存的總容量,收集所需要的時間是0.0042708秒(這個時間在每次執行的時候會有所不同)。
3.java–verbose:jni
-verbose:jni輸出native方法調用的相關情況,一般用於診斷jni調用錯誤信息。
在虛擬機調用native方法時輸出設備顯示信息,格式如下: [Dynamic-linking native method java.lang.Object.registerNatives ...JNI] 該參數用來監視虛擬機調用本地方法的情況,在發生jni錯誤時可爲診斷提供便利。