JVMフラグビット間の相互影響

1469 ワード

OracleのHotsport JVMには、いくつかのチューニングフラグがあります.これらのフラグの具体的な値には、次の3つの方法があります.
  • は、ユーザによってコマンドラインに直接設定
  • である.
  • は、いくつかのオプションによって
  • に間接的に影響する.
  • JVMは、システム環境に応じて適切なデフォルト値、すなわち、いわゆる人体工学原理
  • を自動的に選択する.
    ここでは、2番目のタイプの具体的なインスタンスをリストします.JVMのコンパイラ(bytecodeを対応するプラットフォームに変換するアセンブリコード)にはc 1(Client)とc 2(Server)の区別があり、前者は最適化の程度が低いが、起動速度が速く、後者は最適化が徹底しているが、十分なウォーミングアップが必要であることが知られている.魚と熊掌を兼ねるため、JDK 7はまたいわゆるTieredCompilationを発売し、開始段階でc 1コンパイラを使い、十分なホットスポットがあるまでc 2コンパイラで再コンパイルする.TieredCompilationの有効化は、単純にc 1またはc 2を使用するよりも常に高速ですが、パフォーマンスの向上は限られています.tiered compilationを有効にすると、より多くのメモリが消費されます.これは、よりコンパイルされるため、対応するコードキャッシュもより大きくなります.
    TieredCompilationは-XX:+TieredCompilationオプションでアクティブになります.JDK 7ではデフォルトのオプションではありません.ただし、JDK 8ではデフォルトのオプションです.
    JDK 7では、-XX:+TieredCompilationオプションが設定されていない場合、コードキャッシュ(-XX:ReservedCodeCacheSize)のサイズは48 Mですが、これを設定すると対応するコードキャッシュのサイズは96 Mになります.
    以下に、このオプション間の相互影響を示すスクリプトを示します.
    no_tc=$(java -XX:+PrintFlagsFinal -version 2>/dev/null | grep ReservedCodeCacheSize | awk '{print $4}')
    tc=$(java -XX:+PrintFlagsFinal -XX:+TieredCompilation -version 2>/dev/null | grep ReservedCodeCacheSize | awk '{print $4}')
    
    cs1=$(expr $no_tc \/ 1024 \/ 1024)
    cs2=$(expr $tc \/ 1024 \/ 1024)
    echo "Start JDK7 w/o -XX:+TieredCompilation get code cache size: $cs1 MB"
    echo "Start JDK7 w/  -XX:+TieredCompilation get code cache size: $cs2 MB"