Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

JavaVMの起動オプションについてのメモ

起動オプションの初期値

起動オプションの初期値は何か、最終的にどのような値が指定されたか、そのうちコマンドラインで渡した値は何か、は以下のオプションで表示できる。

  • -XX:+PrintFlagsFinal: 最終的な設定値
  • -XX:+PrintFlagsInitial: 初期値
  • -XX:+PrintCommandLineFlags: コマンドライン上で与えた設定値

java -XX:+PrintFlagsFinal -versionのようにして実行する。Windows TerminalのPowerShell上でシンタックスハイライトの表示がおかしくなるのが気になるならjava -XX:"+PrintFlagsFinal" -versionでもよい。versionオプションを先に指定してjava -version -XX:+PrintFlagsFinalのようにすると表示されないので注意。

コンパイラに渡すJavaVM起動オプション

javac -Jのあとにオプションを指定する。たとえば2コンパイラでStackOverflowErrorが出たらjavac -J-Xss4m Test1.javaなど。

環境ごとの設定オプション

開発時・性能問題調査時・本番環境で指定すべきオプションをわかりやすく指定している記事は以下。検討時のスタート地点として良さそう。

qiita.com

  • 日本語だとあまり説明のない-XX:StackRedPages-XX:StackYellowPages-XX:StackShadowPagesについては以下が分かりやすい。

luozengbin.github.io

pangin.pro

Java 11 or later equlvalent for Java -XX:+PrintGC

Java8の-XX:+PrintGCはJava11以降ではどう変わったのか?は以下にまとまっている。

https://docs.oracle.com/javacomponents/jp/enterprise-performance-pack/epp-user-guide/printing-jvm-information.html