optifine 2gb java jvm jvm-arguments

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 y javac
    • Tienen esta precedencia:
      1. _JAVA_OPTIONS (sobrescribe las demás)
      2. Parámetros de línea de comando
      3. JAVA_TOOL_OPTIONS (es sobrescrito por los demás)

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 de java y javac )
  • 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 .