java - 2gb - optifine jvm arguments
Diferencia entre_JAVA_OPTIONS JAVA_TOOL_OPTIONS y JAVA_OPTS (3)
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
no es utilizado por el JDK, sino por 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 las 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 en
JAVA_TOOL_OPTIONS
y_JAVA_OPTIONS
Documentación oficial
No he podido encontrar ninguna documentación sobre
_JAVA_OPTIONS
.
La documentación de
JAVA_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 en profundidad dentro de los 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
Hay una diferencia más:
_JAVA_OPTIONS
es específica de Oracle.
IBM JVM está utilizando
IBM_JAVA_OPTIONS
en
IBM_JAVA_OPTIONS
lugar.
Esto probablemente se hizo para poder definir opciones específicas de la máquina sin colisiones.
JAVA_TOOL_OPTIONS
es reconocido por todas las máquinas virtuales.
Lo has clavado prácticamente, excepto que estas opciones se seleccionan incluso si inicias JVM en proceso a través de una llamada a la biblioteca.
El hecho de que
_JAVA_OPTIONS
no esté documentado sugiere que no se recomienda usar esta variable, y realmente he visto a personas abusar de ella al configurarla en su
~/.bashrc
.
Sin embargo, si desea llegar al fondo de este problema, puede verificar la fuente de Oracle HotSpot VM (por ejemplo,
en OpenJDK7
).
También debe recordar que no hay garantía de que otras máquinas virtuales tengan o continuarán teniendo soporte para variables indocumentadas.
ACTUALIZACIÓN 2015-08-04: Para ahorrar cinco minutos para las personas que provienen de motores de búsqueda,
_JAVA_OPTIONS
sobre los argumentos de la línea de comandos, que a su vez
JAVA_TOOL_OPTIONS
.
JAVA_OPTS
no
tiene
ningún manejo especial
en JVM en absoluto.
Y de acuerdo con
https://bugs.openjdk.java.net/browse/JDK-4971166
JAVA_TOOL_OPTIONS
se incluye en la especificación JVMTI estándar, hace un mejor manejo de los espacios entre comillas y siempre debe preferirse en lugar de
_JAVA_OPTIONS
específicos de Hotspot no
_JAVA_OPTIONS
.
También tenga en cuenta que el uso de estas impresiones envía mensajes adicionales a stdout que no se pueden suprimir .