-server モードで実行されている Java が、バージョンが「混合モード」であると言うのはなぜですか? これが表示された場合、JVM が純粋なサーバー モードでロードされなかったということですか?
2 に答える
サーバーモードは「混合しない」という意味ではありません。それらは異なる設定です。
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 を実行することに気付くかもしれません。
クライアントとサーバーの両方の Hotspot コンパイラが Java ランタイム環境に含まれています。
デフォルトでは、クライアント コンパイラは有効になっていますが、負荷の高いサーバー側アプリケーションの場合は、-server ランタイム オプションを使用してサーバー コンパイラを実行できます。-version の出力に見られるように、Hotspot 仮想マシンは通常、混合モードで実行されます。混合モードとは、メソッドがインタープリターを介して実行された回数など、いくつかの基準が満たされたときに、Hotspot が Java バイトコードをネイティブ コードに動的にコンパイルすることを意味します。混合実行時モードは、通常、最高のパフォーマンスをもたらします。