java 啟動器會啟動 JVM 實作;許多旗標是 HotSpot 實作選項,而不是 Java 語言或 JVM 規格的要求。請使用應用程式部署之 JDK 發行版的啟動器文件,因為不同發行版的可用選項與預設值會變更。
選項系列 #
標準選項包括 --class-path、--module-path、-Dname=value 與 -version。HotSpot 使用 -X 表示非標準選項,並使用 -XX: 表示診斷與進階旗標。JDK_JAVA_OPTIONS 會將選項加在其環境中的每次啟動器呼叫前,因此只應用於受控的執行環境;當程序出現非預期行為時,也應檢查它。
sh
java --class-path app.jar com.example.Main
java --module-path mods --module com.example.app/com.example.Main
java -Duser.timezone=UTC -jar app.jarHeap 與原生記憶體 #
-Xms 設定初始 heap 大小,-Xmx 設定 heap 大小上限。請使用 k、m 與 g 等二進位尾碼;未指定尾碼時,數值代表位元組。Heap 並不是程序的記憶體限制:metaspace、程式碼快取、執行緒堆疊、直接緩衝區、原生函式庫與 JVM 內部結構也會消耗原生記憶體。
sh
java -Xms512m -Xmx2g -XX:MaxMetaspaceSize=256m -jar app.jar設定容器記憶體限制時,請為非 heap 記憶體預留餘裕。請在正式負載下檢查實際生效的 JVM 旗標與原生記憶體行為,而不要套用不相關服務的 heap 比例。
執行緒堆疊與診斷 #
-Xss 控制為每個 Java 執行緒配置的原生堆疊大小。較大的堆疊可以避免深層遞迴溢位,但會降低固定記憶體預算所能支援的執行緒數量。-XX:ThreadStackSize 以 KiB 表示相應的 HotSpot 設定。
在現代 JDK 上使用 -Xlog 進行統一 JVM 記錄,並使用 jcmd <pid> VM.flags 或 VM.command_line 檢查執行中的 HotSpot 程序。只有在有可量測目的時才啟用昂貴的診斷旗標,調查完成後將其移除。
評論
在 GitHub 上閱讀或評論(發表評論需要登入)