24

-server モードで実行されている Java が、バージョンが「混合モード」であると言うのはなぜですか? これが表示された場合、JVM が純粋なサーバー モードでロードされなかったということですか?

4

2 に答える 2

34

サーバーモードは「混合しない」という意味ではありません。それらは異なる設定です。

Mixed は、JVM がコンパイル済みコードと解釈済みコードを混合することを意味します。オプションで、スイッチ -Xint を使用して完全に解釈されたモードに切り替えることができます (通常はこれを行いたくありません)。

サーバーモードは、hot-spot-compiler がサーバー設定で実行されることを意味します。一般的な前提として、サーバー モードの VM は長時間実行されるため、これを考慮して最適化が行われます。

したがって、混合モードが表示された場合、それは VM がサーバー モードで実行されていないという兆候ではありません。

編集:実際に何が実行されているかを確認したい場合は、次の出力を試してください

System.out.println(System.getProperty("java.vm.name"));
System.out.println(System.getProperty("java.vm.info"));

少なくとも Sun VM または OpenJDK の場合、これはヒントになります。64 ビット システムを使用している場合は、常にサーバー VM を実行することに気付くかもしれません。

于 2011-02-03T20:11:01.473 に答える
8

ホットスポット仮想マシン

クライアントとサーバーの両方の Hotspot コンパイラが Java ランタイム環境に含まれています。

デフォルトでは、クライアント コンパイラは有効になっていますが、負荷の高いサーバー側アプリケーションの場合は、-server ランタイム オプションを使用してサーバー コンパイラを実行できます。-version の出力に見られるように、Hotspot 仮想マシンは通常、混合モードで実行されます。混合モードとは、メソッドがインタープリターを介して実行された回数など、いくつかの基準が満たされたときに、Hotspot が Java バイトコードをネイティブ コードに動的にコンパイルすることを意味します。混合実行時モードは、通常、最高のパフォーマンスをもたらします。

于 2011-02-03T20:04:28.477 に答える