首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 程序員必知的 5 個 JVM 命令行標誌

     編輯:Java 相關知識

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 —— 一級診斷開關

輸出格式因 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 內窺鏡」,能在生產故障時快速獲取關鍵證據,從「盲人摸象」進化為「精準把脈」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
子標誌用途關鍵輸出
-verbose:gcGC 詳情[Full GC ...] 標識 Full GC,分代收集器必看
-verbose:class類加載追蹤加載類全名 + 來源 JAR 路徑,**排查 ClassLoader 衝突神器**
-verbose:jniJNI 活動本地庫加載、native 方法調用,JNI 開發必備