HotSpot JavaのVM引数なしの呼び出しが、-client、-server、または階層型コンパイルオプションで実行されているかどうかを知りたいです。VM引数を指定しない場合、デフォルトでどちらが選択されますか?どのJITコンパイラが実行されているかについての診断を出力する方法はありますか?
質問する
2028 次
3 に答える
5
これがホットスポットであると仮定します。
-XshowSettings:vm
たとえば、私のWindowsボックスでは、次の出力が得られます。
VM settings:
Max. Heap Size (Estimated): 1.77G
Ergonomics Machine Class: client
Using VM: Java HotSpot(TM) 64-Bit Server VM
于 2013-02-11T18:39:02.333 に答える
2
実行されるプログラムから、java.vm.name
プロパティを照会して、クライアントモードとサーバーモードを区別できます。ホットスポットでは、そのオプションを使用した場合は「サーバー」が含まれます(例:) Java HotSpot(TM) 64-Bit Server VM
。
このページによると:
階層型コンパイルがサーバーVMのデフォルトモードになりました。
注:現在は機能しますが、おそらく最も将来性のあるアプローチではありません。
于 2013-02-11T18:39:44.577 に答える
1
どのJITコンパイラが使用されているかを判断するための少し良い方法。
32ビットJDK8を搭載したWindowsマシンの場合:
$ java -version Javaバージョン「1.8.0」 Java(TM)SEランタイム環境(ビルド1.8.0-b132) Java HotSpot(TM)クライアントVM(ビルド25.0-b70、混合モード) $ java -XshowSettings -version 2>&1 | grep sun.management.compiler sun.management.compiler=HotSpotクライアントコンパイラ $ java -server -XshowSettings -version 2>&1 | grep sun.management.compiler sun.management.compiler=HotSpot階層型コンパイラ
したがって、クライアントコンパイラはWindows 32ビットJDK8のデフォルトであり、「-server」オプションを使用すると32ビット階層型コンパイラが得られます。
64ビットJDK8を搭載したWindowsマシンの場合:
$ java -version Javaバージョン「1.8.0」 Java(TM)SEランタイム環境(ビルド1.8.0-b132) Java HotSpot(TM)64ビットサーバーVM(ビルド25.0-b70、混合モード) $ java -XshowSettings -version 2>&1 | grep sun.management.compiler sun.management.compiler =HotSpot64ビット階層型コンパイラ
したがって、TieredCompilerはWindows64ビットJDK8のデフォルトです。Oracleは64ビットのクライアントVMを提供していません。
于 2014-05-01T20:33:30.070 に答える