web-dev-qa-db-ja.com

-serverモードで実行されているJava、バージョンが「混合モード」であると言うのはなぜですか?

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

23
djangofan

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

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

サーバーモードとは、ホットスポットコンパイラがサーバー設定で実行されることを意味します。一般的な想定では、サーバーモードのVMは長時間実行されるため、最適化はこれを念頭に置いて行われます。

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

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

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

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

34
Boris

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

クライアントとサーバーの両方のホットスポットコンパイラは、Javaランタイム環境に含まれています。

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

8
ayush