Je pensais que ce serait bien d’avoir une comparaison entre __Java_OPTIONS
_ et _Java_TOOL_OPTIONS
_. J'en ai cherché un peu, mais je ne trouve rien, alors j'espère que nous pourrons trouver les connaissances ici sur Stackoverflow.
_Java_OPTS
_ est inclus pour une complétude. Cela ne fait pas partie de la machine virtuelle, mais il y a beaucoup de questions à ce sujet dans la nature.
Jusqu'à présent, j'ai découvert que:
Java_OPTS
n'est pas utilisé par le JDK, mais par de nombreuses autres applications (voir this post ).Java_TOOL_OPTIONS
et _Java_OPTIONS
sont des moyens de: spécifiez les arguments de la machine virtuelle Java en tant que variable d'environnement au lieu de paramètres de ligne de commande. Java
et javac
_Java_OPTIONS
_ (écrase les autres)Java_TOOL_OPTIONS
_ (est écrasé par les autres)Java_TOOL_OPTIONS
_ et __Java_OPTIONS
_Java_TOOL_OPTIONS
_ et __Java_OPTIONS
_ (à l'exception de la priorité).Java_TOOL_OPTIONS
_ et __Java_OPTIONS
_ (en plus de Java
et javac
)Java_TOOL_OPTIONS
_ et __Java_OPTIONS
_Je n'ai trouvé aucune documentation sur __Java_OPTIONS
_. La documentation de _Java_TOOL_OPTIONS
_ n'apporte pas beaucoup de lumière sur la différence:
Étant donné que la ligne de commande ne peut pas toujours être consultée ou modifiée, par exemple dans les machines virtuelles incorporées ou simplement lancées au cœur de scripts, une variable Java_TOOL_OPTIONS est fournie afin que des agents puissent être lancés dans ces cas.
...
C'est le code que j'ai utilisé pour comprendre cela. La sortie de la console est incluse sous forme de 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
_
Vous l'avez à peu près cloué, sauf que ces options sont sélectionnées même si vous démarrez JVM en cours via un appel à la bibliothèque.
Le fait que _Java_OPTIONS
ne soit pas documenté suggère qu'il n'est pas recommandé d'utiliser cette variable, et j'ai en fait vu des personnes en abuser en la configurant dans leur ~/.bashrc
. Toutefois, si vous souhaitez aller au fond de ce problème, vous pouvez vérifier la source du serveur Oracle HotSpot VM (par exemple, dans OpenJDK7 ).
Vous devez également vous rappeler qu'il n'y a aucune garantie que d'autres ordinateurs virtuels prennent ou continueront à prendre en charge les variables non documentées.
UPDATE 2015-08-04: Pour gagner cinq minutes pour les personnes issues des moteurs de recherche, _Java_OPTIONS
remplace les arguments de ligne de commande, qui à leur tour remplacent Java_TOOL_OPTIONS
.
Il y a encore une différence: _Java_OPTIONS
est spécifique à Oracle. La machine virtuelle Java IBM utilise IBM_Java_OPTIONS
à la place. Cela a probablement été fait pour pouvoir définir des options spécifiques à la machine sans collision. Java_TOOL_OPTIONS
est reconnu par tous les ordinateurs virtuels.
Java_OPTS
have pas de traitement spécial dans la JVM.
Et selon https://bugs.openjdk.Java.net/browse/JDK-4971166 le Java_TOOL_OPTIONS
est inclus dans la spécification JVMTI standard, gère mieux les espaces cités et doit toujours être préféré au lieu de non documenté _Java_OPTIONS
spécifique à Hotspot.
Attention également à l’utilisation de ces affiche un message supplémentaire qui ne peut pas être supprimé .