CLOVER🍀

That was when it all began.

HotSpot VMの起動時に有効になる拡張オプションを調べる

「-XX:+PrintFlagsFinal」という拡張フラグを有効にすると、「-XX」で指定できる拡張オプションがどのように設定されているかを表示させることができます。

これを利用して、「-version」オプションを使って以下のように入力すると…

$ java -XX:+PrintFlagsFinal -version

ものすごい数のオプション項目と設定が出力されます。

[Global flags]
    uintx AdaptivePermSizeWeight                    = 20              {product}           
    uintx AdaptiveSizeDecrementScaleFactor          = 4               {product}           
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10              {product}           
    uintx AdaptiveSizePausePolicy                   = 0               {product}           
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50              {product}           
    uintx AdaptiveSizePolicyInitializingSteps       = 20              {product}           
    uintx AdaptiveSizePolicyOutputInterval          = 0               {product}           
  〜省略〜
    uintx YoungGenerationSizeIncrement              = 20              {product}           
    uintx YoungGenerationSizeSupplement             = 80              {product}           
    uintx YoungGenerationSizeSupplementDecay        = 8               {product}           
    uintx YoungPLABSize                             = 4096            {product}           
     bool ZeroTLAB                                  = false           {product}           
     intx hashCode                                  = 0               {product}           
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)

数があまりにも膨大なので、実際にはgrepで絞り込んだりするといいでしょう。

$ java -XX:+PrintFlagsFinal -version | grep Parallel
     bool AllowParallelDefineClass                  = false           {product}           
     bool CMSParallelRemarkEnabled                  = true            {product}           
     bool CMSParallelSurvivorRemarkEnabled          = true            {product}           
     intx ParallelGCBufferWastePct                  = 10              {product}           
    uintx ParallelGCThreads                         = 2               {product}           
     bool ParallelGCVerbose                         = false           {product}           
    uintx ParallelOldDeadWoodLimiterMean            = 50              {product}           
    uintx ParallelOldDeadWoodLimiterStdDev          = 80              {product}           
     bool ParallelRefProcBalancingEnabled           = true            {product}           
     bool ParallelRefProcEnabled                    = false           {product}           
     bool PrintParallelOldGCPhaseTimes              = false           {product}           
     bool TraceParallelOldGCTasks                   = false           {product}           
     bool UseParallelGC                            := true            {product}           
     bool UseParallelOldGC                          = true            {product}           
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)

このオプションとその他の拡張オプションを合わせて使用することで指定したオプションがちゃんと効いているか確認したり、アプリケーションを動かそうとしている環境でどのような設定でJavaVMが起動しているかを確認することができます。

以下は、PallelGCのスレッド数を変更して、それを確認する例です。

$ java -XX:+PrintFlagsFinal -XX:ParallelGCThreads=4 -version | grep ParallelGCThreads
    uintx ParallelGCThreads                        := 4               {product}           
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)

参考)
http://q-redux.blogspot.jp/2011/01/inspecting-hotspot-jvm-options.html