實用的JVM參數
1.JIT編譯參數
說明:JVM的JIT(Just-In-Time)編譯器,可以在運行時將字節碼編譯成本地代碼,從而提高函數的執行效率。
使用:-XX:CompileThreshold 當函數的調用次數超過時,JIT就將字節碼編譯成本地機器碼。在client模式下,取值是1500;在server模式下,取值是10000。
-XX:+CITime 打印出JIT編譯的耗時。
-XX:+PrintCompilation 打印出JIT編譯的信息。
2.堆快照(堆Dump)
說明:在性能問題排查中,分析堆快照是必不可少的一環。
使用:-XX:+HeapDumpOnOutOfMemoryError 在程序發生OOM時,導出應用程序的當前堆快照。
-XX:HeapDumpPath 指定堆快照保存位置。
3.錯誤處理
-XX:OnOutOfMemoryError=c:\reset.bat 當OOM發生時,虛擬機運行一段第三方腳本。
4.獲取GC信息
-verbose:gc
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps 輸出GC的發生時間。
-XX:+PrintTenuringDistribution 查看新生對象晉升老年代的實際閾值。
-XX:MaxTenuringThreshold=18
-XX:+PrintHeapAtGC 在GC時打印詳細的堆信息。
-XX:+PrintGCApplicationStoppedTime 顯示應用程序在GC發生時的停頓時間。
-XX:+PrintGCApplicationConcurrentTime 顯示應用程序在GC停頓時間的執行時間。
-Xloggc:C:\gc.log 指定GC日誌的輸出位置。
5.類和對象跟蹤
-XX:+TraceClassUnloading 用於跟蹤類卸載情況。
-XX:+TraceClassLoading 用於跟蹤類加載情況。
-XX:+TraceClassResolution
-verbose:class 相當於同時打開-XX:+TraceClassLoading和-XX:+TraceClassUnloading
-XX:+PrintClassHistogram 用於打印運行時實例的信息。
6.控制GC
-XX:+DisableExplicitGC 禁止程序中使用System.gc()觸發的Full GC。
-Xnoclassgc 禁止GC過程中類的回收。
-Xincgc 增量式的GC。增量式的GC使用特定的算法讓GC線程和應用程序線程交叉執行,從而減小應用程序因GC而產生的停頓時間。
7.選擇類校驗器
-XX:-UseSplitVerifier 使用舊的類校驗器。
-XX:-FailOverToOldVerifier 關閉再次校驗。如果新的校驗器校驗失敗,可以使用老的校驗器再次校驗。
-Xverify:none 禁用類校驗。
8.Solaris下線程控制
-XX:+UseBoundThreads 綁定所有用戶線程到內核線程,減少線程進入飢餓狀態的次數。
-XX:+UseLWPSynchronization 使用內核線程替換線程同步。
-XX:+UseVMInterruptibleIO 允許允許時中斷線程。
9.使用大頁
-XX:+UseLargePages 啓用大頁。
-XX:LargePageSizeInBytes 指定大頁的大小。
10.壓縮指針
-XX:+UseCompressedOops 對Class的屬性指針(靜態成員變量)、對象的屬性指針、普通對象數組的每個元素指針進行壓縮。雖然壓縮指針可以節省內存,但是壓縮和解壓指針也會對JVM造成一定的性能損失。