4

この記事では、次のように述べられています。

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

JDK のディストリビューションにはこれらのシステムが両方とも含まれているため、開発者は -client または -server を指定して必要なシステムを選択できます。

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

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

-serverこれは、フラグを使用してアプリケーションを実行したい場合、適切に動作させるために特定のモードでコンパイルする必要があるということですか?

4

2 に答える 2

6

いいえ、これはランタイム設定です。アプリケーションのバイトコードは同じです。このフラグは、JVM を開始するときに使用します。

混乱はおそらく、「コンパイル」も実行時に行われるという事実に由来します。これは、JVM が Java バイト コードからネイティブ マシン コードへの JIT (ジャスト イン タイム) コンパイルを行うためです (そして、その実行方法はこのフラグの影響を受けます)。 .

于 2012-09-07T07:55:09.950 に答える
2

Javaは「一度コンパイルしてどこでも実行」であることに注意することが重要です。

これはあなたが心配する必要がないことを意味します

  • クライアントとサーバーのどちらで実行するか
  • 32ビットか64ビットか
  • 32ビットまたは64ビットのどちらの参照が使用されているか。
  • 使用されているCPU
  • 使用されているOS
  • 使用されるプロパティ、つまりマクロなし。
  • デバッグログがオンになっています。
  • 使用されているメモリの量。
  • 使用されているコードインストルメンテーション。
  • 実行しているJavaのバージョン(それ以降のバージョンを提供)

これらはすべて、コンパイル時ではなく、実行時に決定されます。

于 2012-09-07T07:56:39.200 に答える