1. -XX:+DisableExplicitGC —— 禁用 System.gc()
痛點:代碼中到處 System.gc() 強制 Full GC,極其昂貴(比 Young GC 昂貴數量級)。
方案:啟用此標誌,System.gc() 變為空操作(no-op)。
java -XX:+DisableExplicitGC -jar app.jar
對比運行前後 GC 日志/性能,驗證顯式 GC 是否有害。生產環境**強烈建議開啟**。
2. -XX:+HeapDumpOnOutOfMemoryError —— OOM 時自動導出堆快照
痛點:間歇性 OOM,無法現場調試,重現困難。
方案:JVM 死前自動生成 .hprof 文件,事後用 jhat、MAT、JVisualVM 分析。
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dumps/heap.hprof -jar app.jar
- 確保路徑可寫、磁盤空間足夠(堆大小 = 文件大小)
- 生產環境**必開**,事後複盤利器
3. -Xbootclasspath/a:/p: —— 擴展/覆蓋 Bootstrap Classpath
場景:需替換/補充 JRE 核心類(如加密提供者、JDBC 驅動、修補 rt.jar 類)。
-Xbootclasspath/a:path:追加到末尾(優先級低)
-Xbootclasspath/p:path:前置到開頭(**優先級高,可覆蓋核心類**)
-Xbootclasspath:path:完全替換(慎用)
注意:直接修改 rt.jar 違反 JDK 許可協議,用此標誌合法合規。
4. -verbose:gc/class/jni —— 一級診斷開關
| 子標誌 | 用途 | 關鍵輸出 |
-verbose:gc | GC 詳情 | [Full GC ...] 標識 Full GC,分代收集器必看 |
-verbose:class | 類加載追蹤 | 加載類全名 + 來源 JAR 路徑,**排查 ClassLoader 衝突神器** |
-verbose:jni | JNI 活動 | 本地庫加載、native 方法調用,JNI 開發必備 |
輸出格式因 JVM 版本/廠商而異,僅作定性分析。
5. -X —— 列出所有非標準參數
java -X
輸出示例:
-Xint:純解釋模式運行(驗證 JIT 是否生效/有 Bug)
-Xloggc:file:GC 日志寫文件(不輸出控制台,生產首選)
-Xms/Xmx:堆初始/最大值
-Xss:線程棧大小
定期執行 java -X 發現新參數,JVM 版本升級參數常變化。
生產環境使用原則
- 非標準參數(
-XX/-X)**不承諾穩定性**,版本間可能變更/移除
- 調優階段大膽用,驗證無副作用後**僅保留必要參數**(如
-Xms/Xmx、HeapDumpOnOOM、DisableExplicitGC、GC 日志)
- 核心業務 JVM **嚴禁** 實驗性參數
總結
這 5 個標誌覆蓋了 **GC 控制、崩潰現場保護、核心類擴展、基礎診斷、參數探索** 五大核心需求。熟練掌握它們,等於擁有了「JVM 內窺鏡」,能在生產故障時快速獲取關鍵證據,從「盲人摸象」進化為「精準把脈」。
- 上一篇文章: JVM 線程堆棧分析實戰指南:從入門到專家
- 下一篇文章: Java 8 接口默認方法深度解析:語法、衝突規則與遷移陷阱
Copyright ©
程式碼之家 All Rights Reserved