_Java_OPTIONS
とJava_TOOL_OPTIONS
を比較するのは素晴らしいことだと思いました。私は1つを少し探していましたが、何も見つかりませんので、ここでStackoverflowに関する知識を見つけることができると思います。
Java_OPTS
は完全を期すために含まれています。 JVMの一部ではありませんが、実際には多くの質問があります。
これまでのところ、私はそれを発見しました:
Java_OPTS
はJDKではなく、他の多くのアプリで使用されます( この投稿 を参照)。Java_TOOL_OPTIONS
および_Java_OPTIONS
は、代わりに環境変数としてJVM引数を指定する方法ですコマンドラインパラメータの。Java
とjavac
によってピックアップされます_Java_OPTIONS
(その他を上書きします)Java_TOOL_OPTIONS
(他のユーザーによって上書きされます)Java_TOOL_OPTIONS
と_Java_OPTIONS
を比較する公式ドキュメントはありますかJava_TOOL_OPTIONS
と_Java_OPTIONS
の間に他の違いはありますか(優先順位を除く)。Java_TOOL_OPTIONS
および_Java_OPTIONS
を取得するか(Java
およびjavac
に加えて)Java_TOOL_OPTIONS
および_Java_OPTIONS
に含めることができるものに関する制限_Java_OPTIONS
に関するドキュメントを見つけることができませんでした。 Java_TOOL_OPTIONS
のドキュメント は、違いをあまり明らかにしていません。
コマンドラインは常にアクセスまたは変更できるとは限らないので、たとえば組み込みVMや、単にスクリプトの奥深くで起動されたVMでは、Java_TOOL_OPTIONS変数が提供され、これらの場合にエージェントを起動できます。
...
これは私がこれを理解するために使用したコードです。コンソール出力はコメントとして含まれています:
export Java_OPTS=foobar
export Java_TOOL_OPTIONS=
export _Java_OPTIONS="-Xmx512m -Xms64m"
Java -version
# Picked up Java_TOOL_OPTIONS:
# Picked up _Java_OPTIONS: -Xmx512m -Xms64m
# Java version "1.7.0_40"
OpenJDK Runtime Environment (IcedTea 2.4.1) (suse-3.41.1-x86_64)
OpenJDK 64-Bit Server VM (build 24.0-b50, mixed mode)
javac -version
# Picked up Java_TOOL_OPTIONS:
# Picked up _Java_OPTIONS: -Xmx512m -Xms64m
# javac 1.7.0_40
export Java_TOOL_OPTIONS="-Xmx1 -Xms1"
export _Java_OPTIONS="-Xmx512m -Xms64m"
javac -version
# Picked up Java_TOOL_OPTIONS: -Xmx1 -Xms1
# Picked up _Java_OPTIONS: -Xmx512m -Xms64m
# javac 1.7.0_40
export Java_TOOL_OPTIONS="-Xmx512m -Xms64m"
export _Java_OPTIONS="-Xmx1 -Xms1"
javac -version
# Picked up Java_TOOL_OPTIONS: -Xmx512m -Xms64m
# Picked up _Java_OPTIONS: -Xmx1 -Xms1
# Error occurred during initialization of VM
# Too small initial heap
export Java_TOOL_OPTIONS="-Xmx1 -Xms1"
export _Java_OPTIONS=
Java -Xmx512m -Xms64m -version
# Picked up Java_TOOL_OPTIONS: -Xmx1 -Xms1
# Picked up _Java_OPTIONS:
# Java version "1.7.0_40"
# OpenJDK Runtime Environment (IcedTea 2.4.1) (suse-3.41.1-x86_64)
# OpenJDK 64-Bit Server VM (build 24.0-b50, mixed mode)
export Java_TOOL_OPTIONS=
export _Java_OPTIONS="-Xmx1 -Xms1"
Java -Xmx512m -Xms64m -version
# Picked up Java_TOOL_OPTIONS:
# Picked up _Java_OPTIONS: -Xmx1 -Xms1
# Error occurred during initialization of VM
# Too small initial heap
ライブラリ呼び出しを介してインプロセスでJVMを起動した場合でも、これらのオプションが選択されることを除いて、あなたはほとんどそれを打ち込んでいます。
_Java_OPTIONS
が文書化されていないという事実は、この変数を使用することは推奨されないことを示唆しており、実際に~/.bashrc
に設定することで人々がそれを悪用しているのを見てきました。ただし、この問題の一番下に到達したい場合は、Oracle HotSpot VMのソースを確認できます(例 OpenJDK7 )。
また、他のVMがドキュメント化されていない変数をサポートしている、またはサポートし続ける保証がないことも忘れないでください。
更新2015-08-04:検索エンジンから来た人のために5分節約するために、_Java_OPTIONS
はコマンドライン引数よりも優先され、コマンドライン引数はJava_TOOL_OPTIONS
よりも優先されます。
もう1つ違いがあります。_Java_OPTIONS
はOracle固有です。 IBM JVMは、代わりにIBM_Java_OPTIONS
を使用しています。これはおそらく、衝突することなくマシン固有のオプションを定義できるようにするために行われました。 Java_TOOL_OPTIONS
はすべてのVMで認識されます。
Java_OPTS
have 特別な処理なし JVMではまったく。
https://bugs.openjdk.Java.net/browse/JDK-4971166 によれば、Java_TOOL_OPTIONS
は標準のJVMTI仕様に含まれており、引用符で囲まれたスペースの処理を改善し、常に文書化されていないホットスポット固有の_Java_OPTIONS
の代わりに推奨されます。
また、これらを使用することに注意してください 抑制できない追加メッセージをstdoutに出力します 。