JVMクライアントモードとサーバーモードの違い
JVMサーバーモードとクライアントモードの主な違いは、開始時に: - サーバーモードが開始時に遅くなることですが、開始すると、パフォーマンスが大幅に向上します。
JVMは、サーバーモードで作業するときにパフォーマンスを大幅に改善できます。サーバーモードのアプリケーションの起動速度は、クライアントモードよりも約10%遅くなりますが、実行速度はクライアントVMの少なくとも10倍高速です。
実行モードパラメーターが指定されていない場合、仮想マシンはホストがサーバーであるかどうかを検出し始めます。その場合、サーバーモードで開始されます。それ以外の場合は、クライアントモードで開始されます。 J2SE5.0検出の基礎は、少なくとも2 CPUと最低2GBのメモリです。
サーバーのCPU、メモリ、ハードディスクはクライアントマシンよりも強いため、プログラムが展開された後、パフォーマンスを向上させるためにサーバーモードで起動する必要があります。
jvmのデフォルトは-xmsが1mで、クライアントモードでは-xmxは64mです。 jvmのデフォルトは-xmsが128m、-xmxはサーバーモードでは1024mです。
サーバー:起動が遅く、より完全なコンピレーション。コンパイラは、高効率の適応型コンパイラであり、サーバー側のアプリケーションを最適化し、サーバー環境でプログラムの実行速度を最大化するように設計されています。
クライアント:クイックスタートアップ、メモリの使用量が少ない、高速コンパイル、デスクトップアプリケーション向けに最適化され、クライアント環境での起動時間を短縮するために最適化されています。
JVMを使用してGUIインターフェイスのインタラクティブなアプリケーションを開始する場合、JVMがサーバーバックグラウンドプログラムの実行に使用されるときにクライアントモードを使用することをお勧めします。
Java -Versionを実行して、JVMが動作するモードを確認できます。
図1のGCCについて
クライアントモードでは、新世代はシリアルGCを選択し、古い世代はシリアルGCを選択し、古い世代はシリアルGCを選択します。
サーバーモードでは、新世代はGCの並行リサイクルを選択し、古い世代は並列GCを選択します。
一般的に、システムアプリケーションを選択するには、スループットの優先度と時間の優先順位を一時停止する2つの方法があります。スループットの優先度のために、サーバーのデフォルトの並列GCメソッドが採用されており、一時停止時間の優先順位のために、同時GC(CMS)メソッドが採用されます。
その他の拡張された知識ポイント
JDKには、2種類のVM、VMクライアント、およびVMサーバーアプリケーションがあります。 2つのソリューションは、Javaランタイム環境のホットスポットコードベースを共有していますが、さまざまなコンパイラ、クライアントとサーバーのユニークなパフォーマンス機能を使用し、HEAPのインラインポリシーの作成やデフォルト値を記述します。
サーバーはクライアント仮想マシンに似ていますが、サーバーVMは最大ピーク動作速度を特別に調整しました。その目的は、長期にわたるサーバーアプリケーションを実行することです。これには、速いスタートアップ時間またはランタイムメモリのフットプリントが小さい最速の実行速度が必要です。
クライアントVMコンパイラは、古典的な仮想マシンであり、以前のバージョンのJDKを介してリアルタイムアップグレード(JIT)で使用されるコンパイラです。クライアント仮想マシンは、アプリケーションとアプレットを実行するためのパフォーマンスの向上を提供します。 Java Virtual Machinesのホットスポット顧客は、アプリケーションのスタートアップ時間とメモリ使用量を短縮して、顧客環境に特に適しています。一般に、クライアントシステムにはより良いグラフィカルユーザーインターフェイスがあります。
したがって、本当の違いはコンパイラレベルでもあります。
クライアント仮想マシンコンパイラは、サーバー仮想マシン上のコンパイラが実行するより複雑な最適化を実行しようとはしませんが、スワップ中はコードの分析とコンパイルに時間がかかります。これは、クライアントの仮想マシンがより速く開始できることを意味し、メモリフットプリントが小さくなります。
サーバー仮想マシンには、最適化のための多くのC ++コンパイラの最適化、同じタイプ、およびアクティブにインラードの仮想メソッド呼び出しなどの従来のコンパイラではできない最適化をサポートする高度な適応コンパイラが含まれています。これは、競争力のあるパフォーマンスの優位性、静的コンパイラです。適応最適化手法は、そのアプローチにおいて非常に柔軟であり、通常、高度な静的分析や編集技術よりも優れています。
-Serverモードを開始すると、速度は遅くなりますが、実行されると、パフォーマンスが大幅に向上します。その理由は、仮想マシンがクライアントモードである場合、軽量コンパイラコードネームC1を使用し、バーチャルマシンは-Serverモードで開始され、比較的ヘビー級コンパイラコードネームC2を使用するためです。 C2はC1コンパイラよりも比較的徹底的に編集されており、サービング後、パフォーマンスが高くなります。
一般に、Java_home/jre/binディレクトリが同時に存在する限り、それぞれのJVMに対応して、2つの構成-Serverが既知およびclient既知の順序を変更するだけです
多くのことを言った後、私は実際に1つの文で要約されました:
アプリケーションはゆっくりと開始されますが、JVMサーバーモードではより速く実行されますが、アプリケーションは迅速に始まりますが、JVMクライアントモードではより速く実行されます。
推奨:サーバーでサーバーモードで実行し、クライアントモードまたはGUIモードでクライアントモードで実行してください。