Ho pensato che sarebbe bello avere un confronto tra _JAVA_OPTIONS
e JAVA_TOOL_OPTIONS
. Ne ho cercato un po ', ma non riesco a trovare nulla, quindi spero di poter trovare le conoscenze qui su StackOverflow.
JAVA_OPTS
è incluso per completezza. Non fa parte della JVM, ma ci sono molte domande al riguardo in natura.
Quello che so:
Finora ho scoperto che:
JAVA_OPTS
non è utilizzato da JDK, ma da un sacco di altre app (vedi questo post ).JAVA_TOOL_OPTIONS
e_JAVA_OPTIONS
sono modi per specificare gli argomenti JVM come variabile di ambiente anziché come parametri della riga di comando.- Sono raccolti da almeno
java
ejavac
- Hanno questa precedenza:
_JAVA_OPTIONS
(sovrascrive gli altri)- Parametri della riga di comando
JAVA_TOOL_OPTIONS
(viene sovrascritto dagli altri)
- Sono raccolti da almeno
Cosa vorrei sapere
- Esistono documenti ufficiali a confronto
JAVA_TOOL_OPTIONS
e_JAVA_OPTIONS
- Ci sono altre differenze tra
JAVA_TOOL_OPTIONS
e_JAVA_OPTIONS
(tranne che dalla precedenza). - Quali file eseguibili raccolgono
JAVA_TOOL_OPTIONS
e_JAVA_OPTIONS
(oltre ajava
ejavac
) - Qualsiasi limitazione su ciò che può essere incluso su
JAVA_TOOL_OPTIONS
e_JAVA_OPTIONS
Documentazione ufficiale
Non sono stato in grado di trovare alcuna documentazione su _JAVA_OPTIONS
. La documentazione perJAVA_TOOL_OPTIONS
non fa molta luce sulla differenza:
Poiché non è sempre possibile accedere o modificare la riga di comando, ad esempio nelle VM incorporate o semplicemente nelle VM lanciate in profondità negli script, viene fornita una variabile JAVA_TOOL_OPTIONS in modo che gli agenti possano essere avviati in questi casi.
...
Script di esempio
Questo è il codice che ho usato per capirlo. L'output della console è incluso come commenti:
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
come la sostituzione preferito, vedere stackoverflow.com/q/52986487/537554