Pensé que sería genial tener una comparación entre _JAVA_OPTIONS
y JAVA_TOOL_OPTIONS
. He estado buscando un poco, pero no puedo encontrar nada, así que espero que podamos encontrar el conocimiento aquí en Stackoverflow.
JAVA_OPTS
Se incluye para completar. No es parte de la JVM, pero hay muchas preguntas al respecto en la naturaleza.
Lo que yo sé:
Hasta ahora he descubierto que:
JAVA_OPTS
JDK no lo usa, pero sí muchas otras aplicaciones (vea esta publicación ).JAVA_TOOL_OPTIONS
y_JAVA_OPTIONS
son formas de especificar argumentos JVM como una variable de entorno en lugar de parámetros de línea de comandos.- Son recogidos por al menos
java
yjavac
- Tienen esta precedencia:
_JAVA_OPTIONS
(sobrescribe a los demás)- Parámetros de línea de comando
JAVA_TOOL_OPTIONS
(es sobrescrito por los demás)
- Son recogidos por al menos
Lo que me gustaria saber
- ¿Existe alguna documentación oficial que compare
JAVA_TOOL_OPTIONS
y_JAVA_OPTIONS
- ¿Hay alguna otra diferencia entre
JAVA_TOOL_OPTIONS
y_JAVA_OPTIONS
(excepto por precedencia)? - Qué ejecutables recogen
JAVA_TOOL_OPTIONS
y_JAVA_OPTIONS
(además dejava
yjavac
) - Cualquier limitación sobre lo que se puede incluir
JAVA_TOOL_OPTIONS
y_JAVA_OPTIONS
Documentación oficial
No he podido encontrar ninguna documentación sobre _JAVA_OPTIONS
. La documentación paraJAVA_TOOL_OPTIONS
no arroja mucha luz sobre la diferencia:
Dado que no siempre se puede acceder o modificar la línea de comandos, por ejemplo, en máquinas virtuales integradas o simplemente máquinas virtuales lanzadas dentro de scripts, se proporciona una variable JAVA_TOOL_OPTIONS para que los agentes se puedan iniciar en estos casos.
...
Script de ejemplo
Este es el código que usé para resolver esto. La salida de la consola se incluye como comentarios:
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
el reemplazo preferido, consulte stackoverflow.com/q/52986487/537554