Java
JVM

見せてやろうJVMが持つ真のチカラを! JVMのオプションを一覧する方法について。

More than 1 year has passed since last update.

結論

以下のコマンドを実行すると、JVMで設定できるオプションの一覧を閲覧できます。

java -XX:+PrintFlagsFinal -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions

尚、詳細が知りたい方は、この辺りを眺めるとより具体的に分かります。

コマンドの説明

  • -XX:+PrintFlagsFinal
    • -XXオプションの一覧を標準出力するオプションです。
  • -XX:+UnlockDiagnosticVMOptions
    • 仮想マシンをチューニングする為のオプションを使えるようにするオプションです。
    • 以下に示すリストでは {diagnostic}となっているものがこのフラグによって変更できるようになります。
  • -XX:+UnlockExperimentalVMOptions
    • 将来サポート予定であるものの機能性が不安定なオプションを使えるようにするオプションです。
    • 最先端の機能を使いたいという先進的なユーザの為にあるオプションです。
    • 本来-XXはサポート無しの隠しオプションなのですが、これこそが 真の アンサポーテッドオプションです。
    • 以下に示すリストでは {experimental}となっているものがこのフラグによって変更できるようになります。

公式ドキュメント

僕の環境について

> java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

です。

僕の環境におけるJVMオプション一覧

オプションは 806 個あるようです。

[Global flags]
    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 AdaptiveSizePolicyWeight                  = 10              {product}
    uintx AdaptiveSizeThroughPutPolicy              = 0               {product}
    uintx AdaptiveTimeWeight                        = 25              {product}
     bool AdjustConcurrency                         = false           {product}
     bool AggressiveOpts                            = false           {product}
     bool AggressiveUnboxing                        = false           {C2 experimental}
     intx AliasLevel                                = 3               {C2 product}
     bool AlignVector                               = true            {C2 product}
     intx AllocateInstancePrefetchLines             = 1               {product}
     intx AllocatePrefetchDistance                  = 256             {product}
     intx AllocatePrefetchInstr                     = 0               {product}
     intx AllocatePrefetchLines                     = 3               {product}
     intx AllocatePrefetchStepSize                  = 64              {product}
     intx AllocatePrefetchStyle                     = 1               {product}
     bool AllowJNIEnvProxy                          = false           {product}
     bool AllowNonVirtualCalls                      = false           {product}
     bool AllowParallelDefineClass                  = false           {product}
     bool AllowUserSignalHandlers                   = false           {product}
     bool AlwaysActAsServerClassMachine             = false           {product}
     bool AlwaysCompileLoopMethods                  = false           {product}
     bool AlwaysLockClassLoader                     = false           {product}
     bool AlwaysPreTouch                            = false           {product}
     bool AlwaysRestoreFPU                          = false           {product}
     bool AlwaysTenure                              = false           {product}
    uintx ArrayAllocatorMallocLimit                 = 4294967295      {experimental}
     bool AssertOnSuspendWaitFailure                = false           {product}
     bool AssumeMP                                  = false           {product}
     intx AutoBoxCacheMax                           = 128             {C2 product}
    uintx AutoGCSelectPauseMillis                   = 5000            {product}
     bool AutoShutdownNMT                           = true            {diagnostic}
     intx BCEATraceLevel                            = 0               {product}
     intx BackEdgeThreshold                         = 100000          {pd product}
     bool BackgroundCompilation