java ランチャーは JVM 実装を起動します。多くのフラグは Java 言語または JVM 仕様の要件ではなく、HotSpot の実装オプションです。可用性とデフォルト値はリリース間で変わるため、アプリケーションがデプロイされる JDK リリースのランチャー文書を使用してください。
オプションの分類 #
標準オプションには、--class-path、--module-path、-Dname=value、-version があります。HotSpot は非標準オプションに -X を、高度なフラグと診断用フラグに -XX: を使用します。JDK_JAVA_OPTIONS は環境内のすべてのランチャー呼び出しの先頭にオプションを追加するため、管理された実行環境に限定して使用し、プロセスの動作が予期しない場合はその値を確認してください。
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.jarヒープとネイティブメモリ #
-Xms は初期ヒープサイズを設定し、-Xmx は最大ヒープサイズを設定します。k、m、g などの 2 進接尾辞を使用できます。接尾辞がない場合、値はバイトです。ヒープはプロセスのメモリ上限ではありません。メタスペース、コードキャッシュ、スレッドスタック、ダイレクトバッファー、ネイティブライブラリ、JVM 内部構造もネイティブメモリを消費します。
java -Xms512m -Xmx2g -XX:MaxMetaspaceSize=256m -jar app.jarコンテナーのメモリ上限は、非ヒープメモリ用の余裕を残して設定します。無関係なサービスのヒープ比率をコピーするのではなく、本番負荷下で有効な JVM フラグとネイティブメモリの動作を検査してください。
スレッドスタックと診断 #
-Xss は各 Java スレッドに割り当てられるネイティブスタックを制御します。スタックを大きくすると深い再帰によるオーバーフローを回避できますが、固定されたメモリ予算でサポートできるスレッド数は減少します。-XX:ThreadStackSize は対応する HotSpot 設定を KiB 単位で表します。
最新の JDK では統合 JVM ロギングに -Xlog を使用し、実行中の HotSpot プロセスを検査するには jcmd <pid> VM.flags または VM.command_line を使用します。コストの高い診断フラグは測定された目的に限って有効にし、調査後に削除してください。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)