_JAVA_OPTIONS, JAVA_TOOL_OPTIONS और JAVA_OPTS के बीच अंतर


151

मैंने सोचा कि यह के बीच तुलना करने के लिए बहुत अच्छा होगा _JAVA_OPTIONSऔर JAVA_TOOL_OPTIONS। मैं एक के लिए थोड़ा खोज रहा हूं, लेकिन मुझे कुछ भी नहीं मिल रहा है, इसलिए मुझे उम्मीद है कि हम यहां स्टैकओवरफ्लो पर ज्ञान पा सकते हैं।

JAVA_OPTSपूर्णता के लिए शामिल है। यह जेवीएम का हिस्सा नहीं है, लेकिन जंगली में इसके बारे में बहुत सारे सवाल हैं।

क्या मुझे पता है:

अब तक मुझे पता चला है कि:

  • JAVA_OPTSJDK द्वारा उपयोग नहीं किया जाता है, लेकिन अन्य ऐप्स के एक समूह द्वारा ( इस पोस्ट को देखें )।
  • JAVA_TOOL_OPTIONSऔर _JAVA_OPTIONSकमांड लाइन मापदंडों के बजाय पर्यावरण चर के रूप में जेवीएम तर्कों को निर्दिष्ट करने के तरीके हैं।
    • कम से कम javaऔर द्वारा उठाया जाता हैjavac
    • उनकी यह मिसाल है:
      1. _JAVA_OPTIONS (दूसरों को ओवरराइट करता है)
      2. कमांड लाइन पैरामीटर
      3. 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 अंतर पर बहुत प्रकाश डाला नहीं है:

चूंकि कमांड-लाइन को हमेशा एक्सेस या संशोधित नहीं किया जा सकता है, उदाहरण के लिए एम्बेडेड VMs में या बस VMs स्क्रिप्ट के भीतर गहराई से लॉन्च किया जाता है, इसलिए एक 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


3
और JDK 9+ के बाद से , JDK_JAVA_OPTIONSपसंदीदा प्रतिस्थापन के रूप में है, देखें stackoverflow.com/q/52986487/537554
ryenus

जवाबों:


62

आपने इसे बहुत पसंद किया है सिवाय इसके कि ये विकल्प तब भी उठाए जाते हैं जब आप लाइब्रेरी कॉल के जरिए जेवीएम इन-प्रोसेस शुरू करते हैं।

तथ्य यह _JAVA_OPTIONSहै कि प्रलेखित नहीं है कि यह इस चर का उपयोग करने के लिए अनुशंसित नहीं है, और मैंने वास्तव में लोगों को इसे अपने में सेट करके इसका दुरुपयोग करते देखा है ~/.bashrc। हालाँकि, यदि आप इस समस्या की तह तक जाना चाहते हैं, तो आप Oracle HotSpot VM (जैसे कि OpenJDK7 ) के स्रोत की जाँच कर सकते हैं ।

आपको यह भी याद रखना चाहिए कि कोई भी गारंटी नहीं है कि अन्य VMs के पास अनिर्दिष्ट चर के लिए समर्थन है या जारी रहेगा।

अद्यतन 2015-08-04: खोज इंजन से आने वाले लोगों के लिए पांच मिनट बचाने के लिए, _JAVA_OPTIONSकमांड-लाइन तर्कों को ट्रम्प करें, जो बदले में ट्रम्प हैं JAVA_TOOL_OPTIONS


36

एक और अंतर है: _JAVA_OPTIONSओरेकल विशिष्ट है। IBM_JAVA_OPTIONSइसके बजाय IBM JVM का उपयोग कर रहा है । यह संभवतः टकराव के बिना मशीन-विशिष्ट विकल्पों को परिभाषित करने में सक्षम होने के लिए किया गया था। JAVA_TOOL_OPTIONSसभी वीएम द्वारा मान्यता प्राप्त है।


21

JAVA_OPTSहै कोई विशेष हैंडलिंग बिल्कुल JVM में।

और https://bugs.openjdk.java.net/browse/JDK-4971166 के अनुसार इसे JAVA_TOOL_OPTIONSमानक JVMTI विनिर्देश में शामिल किया गया है, उद्धृत स्थान की बेहतर हैंडलिंग करता है और इसे हमेशा अनिर्दिष्ट हॉटस्पॉट-विशिष्ट के बजाय पसंद किया जाना चाहिए _JAVA_OPTIONS

इसके अलावा सावधान रहें कि इन प्रिंट्स का उपयोग अतिरिक्त संदेश को रोकने के लिए करें जिन्हें दबाया नहीं जा सकता


जैसा कि @ryenus ने उल्लेख किया है, JDK 9+ के बाद से, JDK_JAVA_OPTIONS को पसंदीदा प्रतिस्थापन के रूप में देखा गया है, देखें कि Java 11 का उपयोग करते समय JDK_JAVA_OPTIONS और JAVA_TOOL-OPTIONS में क्या अंतर है?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.