Różnica między opcjami JAVA opcje Narzędzia JAVA i opcje JAVA
Pomyślałem, że byłoby wspaniale mieć porównanie między _JAVA_OPTIONS
i JAVA_TOOL_OPTIONS
.
Trochę Szukałem jednego, ale nie mogę znaleźć niczego, więc mam nadzieję, że znajdziemy wiedzę tutaj na temat Stackoverflow.
JAVA_OPTS
jest uwzględniona dla kompletności. Nie jest to część JVM, ale jest wiele pytań na ten temat na wolności.
Co wiem:
Do tej pory dowiedziałem się, że:
-
JAVA_OPTS
nie jest używany przez JDK, ale przez kilka innych aplikacje (zobacz ten post ). -
JAVA_TOOL_OPTIONS
oraz_JAVA_OPTIONS
są sposobami określania argumentów JVM jako zmiennej środowiskowej zamiast parametrów wiersza poleceń.- są odbierane przez co najmniej
java
ijavac
- mają ten pierwszeństwo:
-
_JAVA_OPTIONS
(zastępuje Pozostałe) - parametry wiersza poleceń
-
JAVA_TOOL_OPTIONS
(jest nadpisany przez innych)
-
- są odbierane przez co najmniej
Co chciałbym know
- 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 co może być zawarte na
JAVA_TOOL_OPTIONS
i_JAVA_OPTIONS
Oficjalna Dokumentacja
Nie udało mi się znaleźć żadnej dokumentacji _JAVA_OPTIONS
. dokumentacja dla JAVA_TOOL_OPTIONS
nie rzuca zbyt wiele światła na różnicę: {]}
Ponieważ wiersz poleceń nie zawsze może być dostępny lub modyfikowany, na przykład w maszynach wirtualnych osadzonych lub po prostu maszynach wirtualnych uruchomionych głęboko w skryptach, dostępna jest zmienna JAVA_TOOL_OPTIONS, aby w takich przypadkach można było uruchomić agentów.
...
Przykładowy skrypt
To jest kod, którego użyłem, aby to rozgryźć. Wyjście konsoli jest dołączone 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
3 answers
Masz dość dużo przybity go z wyjątkiem tego, że te opcje są pobierane nawet jeśli uruchomisz JVM w procesie poprzez wywołanie biblioteki.
Fakt, że _JAVA_OPTIONS
nie jest udokumentowany sugeruje, że nie zaleca się używania tej zmiennej, a ja widziałem, jak ludzie nadużywają jej, ustawiając ją w swoich ~/.bashrc
. Jeśli jednak chcesz dotrzeć do sedna tego problemu, możesz sprawdzić źródło Oracle HotSpot VM (np. w openjdk7 ).
Należy również pamiętać, że nie ma gwarancja obsługi nieudokumentowanych zmiennych przez inne maszyny wirtualne.
Aktualizacja 2015-08-04: aby zaoszczędzić pięć minut dla ludzi pochodzących z wyszukiwarek, _JAVA_OPTIONS
przebija argumenty wiersza poleceń, które z kolei przebiją JAVA_TOOL_OPTIONS
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-14 12:30:40
Jest jeszcze jedna różnica: _JAVA_OPTIONS
jest specyficzna dla Oracle. IBM JVM używa zamiast tego IBM_JAVA_OPTIONS
. Zostało to prawdopodobnie zrobione, aby móc definiować opcje specyficzne dla maszyny bez kolizji. {[2] } jest rozpoznawany przez wszystkie maszyny wirtualne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-05 23:55:30
JAVA_OPTS
mieć żadnej specjalnej obsługi W JVM w ogóle.
I zgodnie z https://bugs.openjdk.java.net/browse/JDK-4971166 {[1] } jest zawarty w standardowej specyfikacji JVMTI, lepiej radzi sobie z cytowanymi spacjami i powinien być zawsze preferowany od nieudokumentowanych hotspotów specyficznych dla _JAVA_OPTIONS
.
Uważaj również na to, że używając tych wypisujesz na stdout dodatkową wiadomość, której nie da się ukryć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-13 10:22:10