1. ホーム
  2. java

[解決済み] JAVA_OPTIONS、JAVA_TOOL_OPTIONS、JAVA_OPTSの違いについて

2022-02-25 22:13:21

質問

との比較ができたらいいなと思いました。 _JAVA_OPTIONSJAVA_TOOL_OPTIONS . ちょっと探してみたのですが、なかなか見つからないので、ここStackoverflowで知識を得ることができればと思います。

JAVA_OPTS は念のため入れておきます。これはJVMの一部ではありませんが、それについて多くの質問が野放しになっています。

知っていること

今のところ分かったのは

  • JAVA_OPTS は JDK では使用されず、他の多くのアプリで使用されています ( この記事 ).
  • JAVA_TOOL_OPTIONS そして _JAVA_OPTIONS は、JVMの引数をコマンドライン・パラメータではなく、環境変数として指定する方法です。
    • で拾われ、少なくとも javajavac
    • このような優先順位があります。
      1. _JAVA_OPTIONS (他を上書きする)
      2. コマンドラインパラメータ
      3. JAVA_TOOL_OPTIONS (他で上書きされます)

知りたいこと

  • 公式ドキュメントはありますか? JAVA_TOOL_OPTIONS_JAVA_OPTIONS
  • その他に何か違いはありますか? JAVA_TOOL_OPTIONS_JAVA_OPTIONS (precedenceから除く)。
  • どの実行ファイルをピックアップするか JAVA_TOOL_OPTIONS_JAVA_OPTIONS (に加えて javajavac )
  • に含めることができるものに制限がある場合 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 が文書化されていない変数をサポートしている、あるいは今後もサポートし続けるという保証はないことも覚えておく必要があります。

update 2015-08-04: 検索エンジンから来る人のために5分を節約するため。 _JAVA_OPTIONS はコマンドライン引数に取って代わられ、その結果 JAVA_TOOL_OPTIONS .