web-dev-qa-db-ja.com

JVM引数が「-D」で始まるのはなぜですか?

なぜJVM引数の前に-Dを付ける必要があるのかコマンドラインからjarを実行するときは?例えば。

Java -jar -DmyProp="Hello World" myProgram.jar

myProgram.jarをシステムパラメータmyPropで実行するために使用されます。それで、なぜ主要な-D? Javaのアーキテクトがなぜできなかったのか:

Java -jar -myProp="Hello World" myProgram.jar

私は「それがありのままだから」だけではない答えを望んでいます。

ボーナス質問:なぜ-Dという文字が他の文字とは対照的に、それが何かを表しているのですか?


注:この質問は、why「D」またはその他の文字を使用する必要があった理由を尋ねますその点で、そもそも。それはボーナス質問として尋ねられますが、他のどの文字よりも特定の文字「D」を選択することにはあまり関心がありません。

ボーナスの質問には、ここに答えがあります: In Java -D Dは何を表しますか?

46
Colm Bhandal

なぜJavaのアーキテクトができなかったのか:

Java -jar -myProp="Hello World" myProgram.jar

今日は動作しますが、次のJavaバージョンで-myProp引数がJVMオプションとして導入されたと仮定します。
-myProp-myProp JVMオプションと区別する方法は?ありえない。
したがって、システムプロパティをdefine-Dを使用する明らかな理由が存在します。

他の例として、-myPropの代わりに、プログラムが-clientシステムプロパティに依存しているとします。
実行されません。

Java -jar -client="davidxxx" myProgram.jar

次のようなJVMエラーが発生します。

認識されないオプション:-client = davidxxx

as -clientは、値を期待しないJVM標準オプションです。

ただし、-D-clientを使用する場合、ここで-Dclient-client標準JVMオプションとは異なるシステムプロパティとして定義されているので問題ありません。

Java -jar -D-client="davidxxx" myProgram.jar

または両方を使用して:

Java -jar -client -D-client="davidxxx" myProgram.jar

さらに進むために、すべてのJVM引数が-Dで始まるわけではありません が、それらのほとんどには接頭辞(-D-X-XX)がありますとにかく名前空間を定義することができます。

JVM引数には異なるカテゴリがあります。

1。標準オプション(-Dだけでなく)。

これらは、JVMのすべての実装でサポートされている最も一般的に使用されるオプションです。

-Dを使用してシステムプロパティを指定しますが、それらのほとんどにはプレフィックスがありません:-verbose-showversionなど.

2。非標準オプション(-Xで始まる)

これらのオプションは、Java HotSpot Virtual Machineに固有の汎用オプションです。
たとえば:-Xmssize-Xmxsize

3。高度な実行時オプション(-XXで始まる)

これらのオプションは、Java HotSpot VMのランタイム動作を制御します。

4。高度なJITコンパイラオプション(接頭辞-XX

これらのオプションは、Java HotSpot VMによって実行される動的ジャストインタイム(JIT)コンパイルを制御します。

5。高度な保守性オプション(-XXで始まる)

これらのオプションは、システム情報を収集し、広範なデバッグを実行する機能を提供します。

6。高度なガベージコレクションオプション(-XXで始まる)

これらのオプションは、Java HotSpot VMによるガベージコレクション(GC)の実行方法を制御します。


38
davidxxx

「定義」。意味は、Cのプリプロセッサ定義に似ています。-Dは、定義がアプリケーションのコンテキスト内にあり、実行可能ファイル名の前の他のオプションのようなJavaインタープリターコンテキストにないことを示します。

文字 "D"の使用法は ドキュメント で具体的に説明されていませんが、唯一の使用法はシステムプロパティマップでキーを "定義"することです-この参照を除きます:

Systemクラスは、現在の作業環境の構成を定義するPropertiesオブジェクトを保持します。これらのプロパティの詳細については、システムプロパティを参照してください。このセクションの残りの部分では、プロパティを使用してアプリケーション構成を管理する方法について説明します。

30
Rakurai

-myProp = "XYZ"のようなものを指定しない場合、プログラムのメインメソッドへの引数として渡されることを意味します。

-Dは、System.getPropertyを使用してこの値を使用できることを意味します

-Xは、-Xdebugなどの拡張引数に使用されます-Xnoagent -Djava.compiler = NONE -Xrunjdwp:transport = dt_socket、server = y、suspend = y、address = 8000

はい、彼らは交換したかもしれません..キャラクター;しかし、これらの文字は、どのタイプのパラメーターが渡され、誰が消費者であるかを指定するために使用されます。

6
Deepak

-Dがなければ、プロパティは通常のJVMオプションと競合します。たとえば、プロパティjarをどのように設定しますか?

-Dが選択されたと思われます(推測することしかできません)。これは、Cプリプロセッサでもシンボルを定義するために使用され、したがってほとんどの人によく知られているためです。

2
Henry