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