11

HotSpot JavaのVM引数なしの呼び出しが、-client、-server、または階層型コンパイルオプションで実行されているかどうかを知りたいです。VM引数を指定しない場合、デフォルトでどちらが選択されますか?どのJITコンパイラが実行されているかについての診断を出力する方法はありますか?

4

3 に答える 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 に答える