Eu pensei que seria ótimo ter uma comparação entre _JAVA_OPTIONS
e JAVA_TOOL_OPTIONS
. Eu tenho procurado um pouco, mas não consigo encontrar nada, então espero que possamos encontrar o conhecimento aqui no Stackoverflow.
JAVA_OPTS
está incluído para ser completo. Não faz parte da JVM, mas há muitas perguntas sobre isso na natureza.
O que eu sei:
Até agora eu descobri que:
JAVA_OPTS
não é usado pelo JDK, mas por vários outros aplicativos (consulte esta publicação ).JAVA_TOOL_OPTIONS
e_JAVA_OPTIONS
são maneiras de especificar argumentos da JVM como uma variável de ambiente em vez de parâmetros da linha de comandos.- Os são apanhados por pelo menos
java
ejavac
- Eles têm esta precedência:
_JAVA_OPTIONS
(substitui os outros)- Parâmetros da linha de comando
JAVA_TOOL_OPTIONS
(é sobrescrito pelos outros)
- Os são apanhados por pelo menos
O que eu gostaria de saber
- Existe alguma documentação oficial comparando
JAVA_TOOL_OPTIONS
e_JAVA_OPTIONS
- Existem outras diferenças entre
JAVA_TOOL_OPTIONS
e_JAVA_OPTIONS
(exceto a precedência). - Quais executáveis pegam
JAVA_TOOL_OPTIONS
e_JAVA_OPTIONS
(além dejava
ejavac
) - Qualquer limitação sobre o que pode ser incluído
JAVA_TOOL_OPTIONS
e_JAVA_OPTIONS
Documentação oficial
Não consegui encontrar nenhuma documentação sobre _JAVA_OPTIONS
. A documentação paraJAVA_TOOL_OPTIONS
não lança muita luz sobre a diferença:
Como a linha de comando nem sempre pode ser acessada ou modificada, por exemplo, em VMs incorporadas ou simplesmente VMs ativadas profundamente nos scripts, uma variável JAVA_TOOL_OPTIONS é fornecida para que os agentes possam ser ativados nesses casos.
...
Script de exemplo
Este é o código que eu usei para descobrir isso. A saída do console está incluída como comentários:
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
como o substituto preferido, consulte stackoverflow.com/q/52986487/537554