目次

Java HotSpot? VM Options

このドキュメントは、Java HotSpot? VMのパフォーマンス特性に影響を与える、コマンドラインオプション、及び環境変数についての情報を提供します。明示的に指定しない場合、このドキュメントの情報はすべて、Java HotSpot? Client/Server VMの両方に関係します。
微妙に意訳なり、全く書いてないことを書いたり
してるので、適時原文を参照のこと。。。
このドキュメントは以下のセクションを含んでいます。

  • カテゴリ
  • Exact VMオプションの相当品
  • _JIT_ARGS環境変数
    • 読まなくていい
  • _JVM_ARGS環境変数
    • 読まなくていい
  • その他のHotSpot?引数
  • ラージメモリページサポート

Java HotSpot? VMオプションのカテゴリ

Java HotSpot? VMに認識される標準のオプションは、Windows/Solaris/Linux向けJavaアプリケーションランチャーの頁に記載されます。このドキュメントはJava HotSpot? VMに認識される非標準のオプションを扱います。
  • -Xから始まるオプションは全て非標準です。このため全てのVM実装でサポートされているとは限りません。また、J2SDKの以降のリリースでは予告無しに変更される可能性があります。
  • -XXから始まるオプションは通常使わないことが推奨されるオプションです。と言うのは、これらのオプションは環境などの正確な動作前提条件を持ち、システム構成変数への特権アクセスを必要とするかもしれないからです。これらのオプションも予告無しに変更される可能性があります。

Exact VMのオプションに相当するJava HotSpot? VMのオプション

J2SE1.3.0に先立って、Solaris版J2SDKには Exact VM(EVM)として知られるVMが同梱されたものが存在しました。1.3.0の最初の時点で、EVMはJava HotSpot? VMに差し替えられました。

EVMのオプションのいくつかは、Java HotSpot? VMに於いては名前を変えられたり、別のものに差し替えられたりしました。これらのEVM/Java HotSpot? VMのオプションは下表の通りです。

EVM概要HotSpot?
-Xtインストラクショントレース無し
-Xtmメソッドトレース無し
-XossJava stackの最大サイズ無し(HotSpot?が保持するstackは共有です)
-Xvertifyheapheapの完全性検証-XX:+VerifyBeforeGC -XX:+VertifyAfterGC -XX:+VerifyTLE (-XX:+VerifyTLAB in J2SE1.4) -XX:+VerifyBeforeScavenge? -xx:+VerifyAfterScavenge?(all debug only)
-Xmaxjitcodesizeコンパイルしたコードの最大サイズ-Xmaxjitcodesize<num>(前は=が名前/値のデリミタでしたが、今は無いので、-Xmaxjitcodesize32mと言うように設定しましょう。w)
-Xgenconfigheapの設定Xgenconfigの節を参照
-Xoptimize最適化するJITコンパイラを使う-server
-Xconcgcconcurrentガベージコレクタ(1.2.2_07以降)を使う-XX:+UseConcMarkSweepGC(J2SE 1.4.1以降から使用可能)

以下はEVMでは無かったHotSpot? VMのオプションです。

Option概要
-XincgcTrain GCを使う
-XnoincgcTrain GCを使わない(デフォルト)
-XX:MaxHeapFreeRatio?=<Maximum>heapの空き率上限閾値(デフォルトは70)
-XX:MinHeapFreeRatio?=<Minumum>heapの空き率下限閾値(デフォルトは40)。java.sun.comのテーブルではRationとなってるが、typo。;-)
-Xintインタプリタのみ(JustInTime? Compile無し)
-XX:+UseBoundThreads?Solaris版限定option。bound thrを使う。s9以降は気にしないでいい。
-Xmn<Size>Youngのサイズ指定(J2SE 1.4.0より)
-XX:+UseParallelGCパラレルGCを使う(J2SE1.4.1より)
-XX:+UseAltSigs?Solaris版JVMはSIGUSR1を使っているが、他のアプリケーションでSIGUSR1を使っているものと競合する可能性がある。このオプションは、これをSIGUSR1、SIGUSR2以外に切り替えるためのオプション。J2SE1.4.1より利用可能。(じゃあ、何に変えてるのかや、USR1をなんに使っているのかは知らない。。。)

Java HotSpot? VMの_JIT_ARGS環境変数同等品

殆どの_JIT_ARGS環境変数は内部でバッギングオプションで、対応するHotSpot?オプションはありません。殆どが初期導入時の不安定さの原因となりうる最適化のある部分を単に止めるもので、内部テストグループが問題を突き止めるために使われるぐらいでしょう。
_JIT_ARGS環境変数HotSpot?オプション概要
jit/jbe-client/-serverjbeは1.2ベースのシステムの-Xoptimizeと同じで、jitはデフォルトです。1.2の-Xoptimize(またはjbe)は1.3の-serverの置き換えです。
trace-XX:+PrintCompilation?コンパイルされる際のメソッドをトレースする
V8/V9-XX:+UseV8InstrsOnlySPARC上のdebug限定オプションで、実行時の命令セットを限定する

Java HotSpot? VMの_JVM_ARGS環境変数同等品

_JVM_ARGS環境変数HotSpot?オプション概要
bound_threads-XX:+UseBoundThreads?既出
fixed_size_young_gen1.4で-Xmn<size>既出
gc_stats-verbose:gcさまざまなGCの統計情報を出力する
ims_concurrent無し
inline_instrs-XX:MaxInlineSize?=<size>インラインにするメソッドのバイトコード数上限整数値
-XX:FreqInlineSize?=<size>頻繁にインラインで実行されるメソッドのバイトコード数上限整数値。。。って、違いがわかりそうで、わからん。;-)
no_parallel_gc無し
sync_final無し
yield_interval-XX:DontYeildAlotInterval?=<ms>(debug only)yield間のミリ秒の間隔
monitor_order無し

追加のJava HotSpot? VM引数

数はmかMをメガバイト、kかKをキロバイト、gかGをギガバイトとして利用することができる。(例えば、32kと32768は同じ) また-XX:の後のフラグ+と-は、以降のオプションを有効(+)か無効(-)にすることができる。(下表で1列目にある数値やフラグがデフォルト値である)

フラグデフォルト概要
-XX:MaxHeapFreeRatio?=70既出
-XX:MinHeapFreeRatio?=40既出
-XX:+UseThreadPriorities?+NativeのThreadの優先度を利用する
-XX:MaxPermSize?=64mheapのPermanent領域のサイズを指定する。ここを参照のこと。
-XX:-CITime-終了時にコンパイル時間の統計情報を出力する。
-XX:-PrintTenuringDistribution?-youngからoldへ昇格する際の基準値となるage情報を表示する。 tenureって、動詞じゃないし。。。;-)
-XX:TargetSurvivorRatio?=50MinorGC後のSuvivorスペースで使われている領域の割合の希望値
-XX:+DisableExplicitGC-System.gc()の呼び出しを抑制する(=呼び出しても無効)。JVMは必要な場合に、GCを行う。+とあるわりに、Solaris版JVM1.5.0_06だとデフォルト-になってるっぽい
-XX:+ScavengeBeforeFullGC+Full GCの前に必ずMinor GCを行う(J2SE5.0以降)
-XX:+UseBiasedLocking?+biased lockingを有効にする。よくわからんので後述。(*1) J2SE5.0 update6以降(=1.5.0_06)
-XX:+UseParallelOldGC+FGC時にParallelGCを使う。-XX:+UseParallelGCで自動的に設定される。(J2SE5.0 update6以降)
-XX:+AggressiveOpts?+将来のデフォルトになるかもしれないコンパイラの最適化を行う。(J2SE5.0 update6以降)
ここからSolaris版限定
-XX:-AllowUserSiginalHandler?-アプリがsiginal handlerをinstallする際にWARNを出さない
-XX:AltStackSize?=16384代替signalスタックサイズ
-XX:+MaxFDLimit+setrlimit(2)で、ファイルディスクリプタを最大サイズにする
-XX:-UseBoundThreads?-既出
-XX:-UseLWPSynchronization-スレッドに基づく同期の代わりに、LWPに基づく同期を用いる。J2SE1.4.0以降のデフォルト。
-XX:+UseLargePages?+8K以上のmemory pageを使う。詳細は後述。(Solarisではon、Linux/Windowsではoff がデフォルト)

これ以降のオプションのデフォルトはarch/os/jvmによって異なる。以下はSPARC/-server, JVM1.3の場合である。

フラグデフォルト概要
-XX:CompileTheshold?=1000コンパイル前のメソッドの呼び出し、又は分岐の数。-serverで10000、-clientで1500
-XX:MaxNewSize?=32myoung領域の最大サイズ
-XX:NewRatio?=2old領域を1とした場合のyoung領域の割合。
-XX:NewSize?=2228224young領域のデフォルトサイズ
-XX:PerBlockSpin?=10Linux版J2SE1.4.2限定オプション
-XX:-UseSpinning?-Linux版J2SE1.4.2限定オプション
-XX:ReservedCodeCacheSize?=32mコードキャッシュの予約量
-XX:SurvivorRatio?=64eden領域を1とした場合の、Survivor領域のサイズ(s0+s1)
-XX:ThreadStackSize?=512Threadのスタックサイズ(キロバイト単位)
-XX:-UseISM-こっちを参照
ここからSolaris版限定
-XX:+UseTLE+Thread localの変数を、(多分w)thr_getspecific(3THR)を使って管理する。SPARC版-serverでのみ有効。その他は無効。1.4.2では-XX:+UseTLAB
-XX:-UseMPSS-Java heapにlarge pageを利用する。32bit/s10 x86 AMD JVMの場合、2mを設定する。デフォルト値はSPARC 8m x86 4m x86_64 2m)

8K以上のメモリページのサポート

ここはSolaris/Windows/Linuxで、Large Pageの設定を行う方法、Large Pageのメリット・デメリットが 書いてある箇所なので、訳は無し。

Last-modified: 2006-10-23 17:30:10