Ich dachte, es wäre großartig, einen Vergleich zwischen _JAVA_OPTIONS
und zu haben JAVA_TOOL_OPTIONS
. Ich habe ein bisschen nach einem gesucht, aber ich kann nichts finden, also hoffe ich, dass wir das Wissen hier auf Stackoverflow finden können.
JAVA_OPTS
ist der Vollständigkeit halber enthalten. Es ist nicht Teil der JVM, aber es gibt viele Fragen dazu in freier Wildbahn.
Was ich weiß:
Bisher habe ich Folgendes herausgefunden:
JAVA_OPTS
wird nicht vom JDK verwendet, sondern von einer Reihe anderer Apps (siehe diesen Beitrag ).JAVA_TOOL_OPTIONS
und_JAVA_OPTIONS
sind Möglichkeiten, JVM-Argumente als Umgebungsvariable anstelle von Befehlszeilenparametern anzugeben.- Die werden von mindestens
java
und abgeholtjavac
- Sie haben diesen Vorrang:
_JAVA_OPTIONS
(überschreibt die anderen)- Befehlszeilenparameter
JAVA_TOOL_OPTIONS
(wird von den anderen überschrieben)
- Die werden von mindestens
Was ich gerne wissen würde
- Gibt es offizielle Dokumentationen zum Vergleich
JAVA_TOOL_OPTIONS
und_JAVA_OPTIONS
- Gibt es andere Unterschiede zwischen
JAVA_TOOL_OPTIONS
und_JAVA_OPTIONS
(außer nach Vorrang) ? - Welche ausführbaren Dateien abholen
JAVA_TOOL_OPTIONS
und_JAVA_OPTIONS
(zusätzlich zujava
undjavac
) - Jede Einschränkung dessen, was auf
JAVA_TOOL_OPTIONS
und enthalten sein kann_JAVA_OPTIONS
Offizielle Dokumentation
Ich konnte keine Dokumentation finden _JAVA_OPTIONS
. Die Dokumentation fürJAVA_TOOL_OPTIONS
wirft nicht viel Licht auf den Unterschied:
Da nicht immer auf die Befehlszeile zugegriffen oder diese geändert werden kann, z. B. in eingebetteten VMs oder einfach in VMs, die tief in Skripten gestartet wurden, wird eine Variable JAVA_TOOL_OPTIONS bereitgestellt, damit in diesen Fällen Agenten gestartet werden können.
...
Beispielskript
Dies ist der Code, mit dem ich das herausgefunden habe. Die Konsolenausgabe ist als Kommentar enthalten:
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
JDK_JAVA_OPTIONS
als bevorzugten Ersatz, siehe stackoverflow.com/q/52986487/537554