[解決済み] java -server" と "java -client "の本当の違い?
質問
java -serverとjava -clientの間に実用的な差はありますか?
サンのサイトでは、曖昧な表現しか見当たりません。
<ブロッククオートサーバーの起動は遅くなりますが、高速に動作するはずです"。
実際のところ、どのような違いがあるのでしょうか? (現在JDK1.6.0_07を使用。)
解決方法は?
これは本当にリンクしています。 ホットスポット と、デフォルトの オプション値 ( Java HotSpot VM オプション ) があり、クライアントとサーバーの構成で異なります。
から 第2章 ホワイトペーパーの( Java HotSpotパフォーマンスエンジンアーキテクチャ ):
JDKには、クライアントサイドのVMと、サーバーアプリケーション用に調整されたVMの2種類があります。この2つのソリューションは、Java HotSpot ランタイム環境のコードベースを共有していますが、クライアントとサーバーの明らかにユニークなパフォーマンス特性に適した、異なるコンパイラを使用しています。この違いには、コンパイルのインライン化ポリシーやヒープのデフォルト値などが含まれます。
Server VMとClient VMは似ていますが、Server VMはピーク動作速度を最大化するために特別にチューニングされています。これは、起動時間の短さや実行時のメモリ使用量の少なさよりも、可能な限り高速な動作速度を必要とする、長時間稼働するサーバー・アプリケーションの実行を想定しています。
Client VMコンパイラは、Classic VMと以前のバージョンのJDKで使用されていたジャストインタイム(JIT)コンパイラの両方のアップグレード版として機能します。Client VMは、アプリケーションやアプレットのランタイムパフォーマンスを向上させます。Java HotSpot Client VM は、アプリケーションのスタートアップ時間とメモリフットプリントを減らすために特別にチューニングされており、特にクライアント環境に適している。一般に、クライアントシステムはGUIに適しています。
つまり、本当の違いはコンパイラレベルにもあるのです。
Client VMのコンパイラは、Server VMのコンパイラが実行する複雑な最適化の多くを実行しようとしませんが、その代わりに、コードの一部を解析してコンパイルするのに必要な時間が短くなります。これは、Client VMがより速く起動し、より小さなメモリフットプリントを必要とすることを意味します。
Server VM には、最適化 C++ コンパイラが行う最適化の多くをサポートする先進の適応型コンパイラが搭載されており、仮想メソッド呼び出し時の積極的なインライン化など、従来のコンパイラでは不可能な最適化も実現しています。これは、静的コンパイラと比較して、競争力、性能面で優位性がある。適応型最適化技術は、そのアプローチにおいて非常に柔軟であり、一般的に高度な静的解析およびコンパイル技術をも凌駕する性能を発揮します。
注意:リリースされた jdk6アップデート10 参照 更新リリースノート:1.6.0_10での変更点 ) は起動時間を改善しようとしましたが、ホットスポットオプションとは異なる理由で、より小さなカーネルで異なるパッケージングがされています。
G・デメッキ
指摘
コメントで
というのは、64ビット版のJDKでは
-client
オプションは長年にわたって無視されています。
参照
Windows
java
コマンド
:
-client
Java HotSpotクライアントVMを選択します。
64ビット対応のJDKでは、現在このオプションは無視され、代わりにJava Hotspot Server VMが使用されます。 .
2022: ホルガー を参照しています。 コメント は JavaSE6 / サーバークラスのマシン検出 を、追加しています。
32ビットWindowsシステムのみ。
-client
が無条件に選ばれることはありませんでした。
他のシステムでは、マシンが「サーバークラス」であるかどうかをチェックし、少なくとも2つのコアと少なくとも2GBのメモリを持つ場合に満たされていました。そのため、ほとんどすべてのものが
-server
を、かなり長い間使ってきました。最も安いコンピュータでさえ、「サーバークラス」のマシンです。Sun/Oracleの64ビルドは、クライアントJVMを同梱してさえいませんでした。
関連
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] java.lang.UnsupportedClassVersionError を修正する方法。サポートされていないメジャー.マイナーバージョン
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] Javaクラスにおけるcanonical name、simple name、class nameの違いは何ですか?
-
[解決済み] Oracle JDKとOpenJDKの違いについて
-
[解決済み] JVM、JDK、JRE、OpenJDKの違いは何ですか?
-
[解決済み】HashMap、LinkedHashMap、TreeMapの違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
eclipse で「アクセス制限: タイプ 'HttpServer' は API ではありません」というプロンプトが表示される。
-
アクセス制限です。タイプ 'Application' は API ではありません。
-
Enumとの組み合わせでswitchの使い方を一度覚えるために必要な定数式
-
マスキング このリソースにアクセスするには、完全な認証が必要です。
-
自動配線された依存性のインジェクションに失敗しました。
-
Error: java.lang.NoClassDefFoundError: クラス XXXX を初期化できませんでした
-
java 例外。Javaツールの初期化
-
[解決済み】Eclipse - Java (JRE) / (JDK) がない......仮想マシンがない
-
[解決済み] 文字列内のすべての文字を反復処理する最速の方法