Я подумав, що було б чудово порівняти між _JAVA_OPTIONSта JAVA_TOOL_OPTIONS. Я трохи шукав одного, але нічого не можу знайти, тому сподіваюся, що ми знайдемо знання тут, на Stackoverflow.
JAVA_OPTSвключено для повноти. Це не є частиною СВМ, але є багато питань щодо цього в дикій природі.
Що я знаю:
Поки що я з'ясував, що:
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 не проливає багато світла на різницю:
Оскільки до командного рядка не завжди можна отримати доступ чи змінити його, наприклад, у вбудовані VM або просто VM, запущені глибоко в скриптах, надається змінна JAVA_TOOL_OPTIONS, щоб агенти могли запускатися в цих випадках.
...
Приклад сценарію
Це код, який я використовував для з'ясування цього. Вихід консолі включений як коментарі:
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якості кращого заміни см stackoverflow.com/q/52986487/537554