Я подумал, что было бы здорово провести сравнение между _JAVA_OPTIONS
и JAVA_TOOL_OPTIONS
.
Я искал немного для одного, но я ничего не могу найти, поэтому надеюсь, что мы найдем здесь знания на Stackoverflow.
JAVA_OPTS
включен для полноты. Это не часть JVM, но в нем много вопросов.
Что я знаю:
До сих пор я узнал, что:
-
JAVA_OPTS
не используется JDK, а рядом других приложений (см. этот пост). -
JAVA_TOOL_OPTIONS
и_JAVA_OPTIONS
- это способы указания аргументов JVM в качестве переменной окружения вместо параметров командной строки.- Поднимаются как минимум
java
иjavac
- У них есть это преимущество:
-
_JAVA_OPTIONS
(перезаписывает остальные) - Параметры командной строки
-
JAVA_TOOL_OPTIONS
(перезаписывается другими)
-
- Поднимаются как минимум
Что я хотел бы знать
- Есть ли официальная документация, сравнивающая
JAVA_TOOL_OPTIONS
и_JAVA_OPTIONS
- Существуют ли другие различия между
JAVA_TOOL_OPTIONS
и_JAVA_OPTIONS
(кроме приоритета). - Какие исполняемые файлы выбирают
JAVA_TOOL_OPTIONS
и_JAVA_OPTIONS
(в дополнение кjava
иjavac
) - Любое ограничение на то, что может быть включено в
JAVA_TOOL_OPTIONS
и_JAVA_OPTIONS
Официальная документация
Мне не удалось найти документацию о _JAVA_OPTIONS
. Документация для JAVA_TOOL_OPTIONS
не проливает много света на разницу:
Поскольку в командной строке не всегда можно получить доступ или изменить, например, во встроенных виртуальных машинах или просто виртуальных машинах, запущенных глубоко внутри сценариев, предоставляется переменная JAVA_TOOL_OPTIONS, позволяющая запускать агентов в этих случаях.
...
Пример script
Это код, который я использовал, чтобы понять это. Консольный вывод включается в качестве комментариев:
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