「java -server」と「java -client」の実際の違いは何ですか? 質問する

「java -server」と「java -client」の実際の違いは何ですか? 質問する

「java -server」と「java -client」の間には実際的な違いはありますか?

サンのサイトで見つけたのは漠然とした

「-server は起動が遅くなりますが、実行は速くなります」。

実際の違いは何ですか? (現在 JDK 1.6.0_07 を使用しています。)

ベストアンサー1

これは実際にはHotSpotとデフォルトのオプション値Java HotSpot VM オプション) は、クライアントとサーバーの構成によって異なります。

から第2章ホワイトペーパー(Java HotSpot パフォーマンス エンジン アーキテクチャ):

JDK には、クライアント側製品とサーバー アプリケーション用に調整された VM の 2 種類の VM が含まれています。これら 2 つのソリューションは、Java HotSpot ランタイム環境コード ベースを共有していますが、クライアントとサーバーの明確に固有のパフォーマンス特性に適した異なるコンパイラを使用しています。これらの違いには、コンパイルのインライン化ポリシーとヒープのデフォルトが含まれます。

サーバー VM とクライアント VM は似ていますが、サーバー VM はピーク動作速度を最大化するように特別に調整されています。これは、起動時間の短縮や実行時のメモリ使用量の削減よりも、可能な限り最速の動作速度を必要とする、長時間実行されるサーバー アプリケーションを実行することを目的としています。

クライアント VM コンパイラは、以前のバージョンの JDK で使用されていたクラシック VM とジャストインタイム (JIT) コンパイラの両方のアップグレードとして機能します。クライアント VM は、アプリケーションとアプレットの実行時のパフォーマンスを向上させます。Java HotSpot クライアント VM は、アプリケーションの起動時間とメモリ使用量を削減するように特別に調整されており、クライアント環境に特に適しています。一般に、クライアント システムは GUI に適しています。

したがって、実際の違いはコンパイラ レベルにもあります。

クライアント VM コンパイラは、サーバー VM のコンパイラによって実行されるより複雑な最適化の多くを実行しませんが、その代わりに、コードの分析とコンパイルにかかる時間が短くなります。つまり、クライアント VM の起動が速くなり、必要なメモリ フットプリントが小さくなります。

サーバー VM には、最適化 C++ コンパイラによって実行されるのと同じタイプの最適化の多くをサポートする高度な適応型コンパイラが含まれています。また、仮想メソッド呼び出し全体にわたる積極的なインライン化など、従来のコンパイラでは実行できないいくつかの最適化もサポートしています。これは、静的コンパイラに対する競争力とパフォーマンスの優位性です。適応型最適化テクノロジは、そのアプローチが非常に柔軟で、通常は高度な静的分析およびコンパイル手法よりも優れたパフォーマンスを発揮します。

注: jdk6 update 10のリリース(アップデートリリースノート:1.6.0_10 の変更点) は起動時間の改善を試みましたが、ホットスポット オプションとは異なる理由で、はるかに小さいカーネルで異なる方法でパッケージ化されていました。


G. デメッキ指摘しているコメント欄64ビット版のJDKでは、この-clientオプションは長年無視されていました
Windowsjavaコマンド:

-client

Java HotSpot Client VM を選択します。64
ビット対応の JDK は現在このオプションを無視し、代わりに Java HotSpot Server VM を使用します


2022年:ホルガー参照先コメントJavaSE6 / サーバークラスのマシン検出と付け加えた。

32 ビット Windows システムでのみ、-client無条件に選択されます。
他のシステムでは、マシンが「サーバー クラス」であるかどうかがチェックされ、少なくとも 2 つのコアと少なくとも 2 GiB のメモリがある場合に満たされます。

これが、-serverこれまでかなり長い間、ほとんどすべてのコンピュータが使用されている理由です。入手可能な最も安価なコンピュータでさえ、「サーバー クラス」マシンです。Sun/Oracle 64 ビルドには、クライアント JVM さえ付属していませんでした。

おすすめ記事