J'ai pensé que ce serait formidable d'avoir une comparaison entre _JAVA_OPTIONS
et JAVA_TOOL_OPTIONS
. J'en ai cherché un peu, mais je ne trouve rien, donc j'espère que nous pourrons trouver les connaissances ici sur Stackoverflow.
JAVA_OPTS
est inclus par souci d'exhaustivité. Il ne fait pas partie de la JVM, mais il y a beaucoup de questions à ce sujet dans la nature.
Ce que je sais:
Jusqu'à présent, j'ai découvert que:
JAVA_OPTS
n'est pas utilisé par le JDK, mais par un tas d'autres applications (voir cet article ).JAVA_TOOL_OPTIONS
et_JAVA_OPTIONS
sont des moyens de spécifier des arguments JVM en tant que variable d'environnement au lieu de paramètres de ligne de commande.- Les sont ramassés par au moins
java
etjavac
- Ils ont cette priorité:
_JAVA_OPTIONS
(écrase les autres)- Paramètres de ligne de commande
JAVA_TOOL_OPTIONS
(est écrasé par les autres)
- Les sont ramassés par au moins
Ce que j'aimerais savoir
- Existe-t-il une documentation officielle comparant
JAVA_TOOL_OPTIONS
et_JAVA_OPTIONS
- Existe-t-il d'autres différences entre
JAVA_TOOL_OPTIONS
et_JAVA_OPTIONS
(sauf par ordre de priorité). - Quels exécutables ramassent
JAVA_TOOL_OPTIONS
et_JAVA_OPTIONS
(en plus dejava
etjavac
) - Toute limitation de ce qui peut être inclus sur
JAVA_TOOL_OPTIONS
et_JAVA_OPTIONS
Documentation officielle
Je n'ai pas pu trouver de documentation sur _JAVA_OPTIONS
. La documentation pourJAVA_TOOL_OPTIONS
ne fait pas beaucoup de lumière sur la différence:
Étant donné que la ligne de commande ne peut pas toujours être accédée ou modifiée, par exemple dans les VM intégrées ou simplement les VM lancées en profondeur dans les scripts, une variable JAVA_TOOL_OPTIONS est fournie afin que les agents puissent être lancés dans ces cas.
...
Exemple de script
C'est le code que j'ai utilisé pour comprendre cela. La sortie de la console est incluse en tant que commentaires:
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
comme remplacement préféré, voir stackoverflow.com/q/52986487/537554