Pomyślałem, że byłoby wspaniale mieć porównanie między _JAVA_OPTIONS
i JAVA_TOOL_OPTIONS
. Trochę szukałem jednego, ale nic nie mogę znaleźć, więc mam nadzieję, że znajdziemy tutaj wiedzę na temat Stackoverflow.
JAVA_OPTS
jest dołączony dla kompletności. Nie jest częścią JVM, ale w środowisku naturalnym pojawia się wiele pytań na ten temat.
Co wiem:
Do tej pory dowiedziałem się, że:
JAVA_OPTS
nie jest używany przez JDK, ale przez kilka innych aplikacji (zobacz ten post ).JAVA_TOOL_OPTIONS
i_JAVA_OPTIONS
są sposobami określania argumentów JVM jako zmiennej środowiskowej zamiast parametrów wiersza poleceń.- Są odbierani przez co najmniej
java
ijavac
- Mają ten priorytet:
_JAVA_OPTIONS
(nadpisuje pozostałe)- Parametry wiersza polecenia
JAVA_TOOL_OPTIONS
(jest nadpisany przez inne)
- Są odbierani przez co najmniej
Co chciałbym wiedzieć
- Czy jest jakaś oficjalna dokumentacja porównująca
JAVA_TOOL_OPTIONS
i_JAVA_OPTIONS
- Czy są jakieś inne różnice między
JAVA_TOOL_OPTIONS
i_JAVA_OPTIONS
(z wyjątkiem pierwszeństwa). - Które pliki wykonywalne pobierają
JAVA_TOOL_OPTIONS
i_JAVA_OPTIONS
(opróczjava
ijavac
) - Wszelkie ograniczenia dotyczące tego, co można włączyć do
JAVA_TOOL_OPTIONS
i_JAVA_OPTIONS
Oficjalna dokumentacja
Nie udało mi się znaleźć żadnej dokumentacji na temat _JAVA_OPTIONS
. Dokumentacja dlaJAVA_TOOL_OPTIONS
nie rzuca dużo światła na różnicę:
Ponieważ nie zawsze można uzyskać dostęp do wiersza polecenia lub go zmodyfikować, na przykład na wbudowanych maszynach wirtualnych lub po prostu maszynach wirtualnych uruchamianych głęboko w skryptach, dostępna jest zmienna JAVA_TOOL_OPTIONS, która umożliwia uruchamianie agentów w takich przypadkach.
...
Przykładowy skrypt
To jest kod, którego użyłem, aby to rozgryźć. Dane wyjściowe konsoli są dołączane jako komentarze:
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
preferowany zamiennik, patrz stackoverflow.com/q/52986487/537554