खोज…


वाक्य - विन्यास

  • java [ <opt> ... ] <class-name> [ <argument> ... ]

  • java [ <opt> ... ] -jar <jar-file-pathname> [ <argument> ... ]

टिप्पणियों

java कमांड का उपयोग कमांड लाइन से जावा एप्लिकेशन को चलाने के लिए किया जाता है। यह किसी भी जावा एसई JRE या JDK के हिस्से के रूप में उपलब्ध है।

विंडोज सिस्टम पर java कमांड के दो वेरिएंट हैं:

  • java वेरिएंट ने एप्लिकेशन को एक नई कंसोल विंडो में लॉन्च किया है।
  • javaw संस्करण ने एक नई कंसोल विंडो javaw बिना एप्लिकेशन लॉन्च किया।

अन्य प्रणालियों (जैसे लिनक्स, मैक ओएसएक्स, यूनिक्स) पर केवल java कमांड दिया गया है, और यह एक नई कंसोल विंडो लॉन्च नहीं करता है।

वाक्य रचना में <opt> प्रतीक java कमांड लाइन पर एक विकल्प को दर्शाता है। "जावा विकल्प" और "हीप और स्टैक साइजिंग विकल्प" विषय सबसे अधिक उपयोग किए जाने वाले विकल्पों को कवर करते हैं। अन्य JVM फ्लैग विषय में शामिल हैं।

एक निष्पादन योग्य JAR फ़ाइल चलाना

निष्पादन योग्य JAR फाइलें जावा कोड को एक ही फाइल में इकट्ठा करने का सबसे सरल तरीका है जिसे निष्पादित किया जा सकता है। * (संपादकीय नोट: JAR फ़ाइलों का निर्माण एक अलग विषय द्वारा कवर किया जाना चाहिए।) *

यह मानते हुए कि आपके पास pathname <jar-path> साथ एक निष्पादन योग्य JAR फ़ाइल है, आपको इसे निम्नानुसार चलाने में सक्षम होना चाहिए:

java -jar <jar-path>

यदि कमांड को कमांड-लाइन तर्क की आवश्यकता होती है, तो <jar-path> बाद उन्हें जोड़ें। उदाहरण के लिए:

java -jar <jar-path> arg1 arg2 arg3

यदि आपको java कमांड लाइन पर अतिरिक्त JVM विकल्प प्रदान करने की आवश्यकता है, तो उन्हें -jar विकल्प से पहले जाना होगा। ध्यान दें कि एक -cp / -classpath विकल्प है यदि आप का उपयोग करें नजरअंदाज कर दिया जाएगा -jar । एप्लिकेशन की क्लासपैथ JAR फ़ाइल मेनिफ़ेस्ट द्वारा निर्धारित की जाती है।

"मुख्य" वर्ग के माध्यम से जावा अनुप्रयोगों को चलाना

जब एक एप्लिकेशन को एक निष्पादन योग्य JAR के रूप में पैक नहीं किया गया है, तो आपको java कमांड लाइन पर एक एंट्री-पॉइंट क्लास का नाम प्रदान करना होगा।

हैलोवर्ल्ड क्लास चला रहा हूं

"HelloWorld" उदाहरण एक नया जावा प्रोग्राम बनाने में वर्णित है। इसमें HelloWorld नामक एक एकल वर्ग शामिल है जो एक प्रवेश-बिंदु के लिए आवश्यकताओं को संतुष्ट करता है।

यह मानते हुए कि (संकलित) "HelloWorld.class" फ़ाइल वर्तमान निर्देशिका में है, इसे निम्नानुसार लॉन्च किया जा सकता है:

java HelloWorld

ध्यान देने योग्य कुछ महत्वपूर्ण बातें हैं:

  • हमें कक्षा का नाम प्रदान करना चाहिए: ".class" फ़ाइल या ".java" फ़ाइल के लिए पथनाम नहीं।
  • यदि वर्ग पैकेज में घोषित किया गया है (जैसा कि अधिकांश जावा कक्षाएं हैं), तो हम जिस java कमांड को आपूर्ति करते हैं उसका पूरा नाम कक्षा का नाम होना चाहिए। उदाहरण के लिए यदि SomeClass को com.example पैकेज में घोषित किया जाता है, तो पूरा क्लासनाम com.example.SomeClass होगा।

एक वर्गपथ निर्दिष्ट करना

जब तक हम java -jar कमांड कमांड सिंटैक्स में उपयोग नहीं कर रहे हैं, तब तक java कमांड क्लासपाथ की खोज करके लोड किए जाने वाले वर्ग की तलाश करता है; द क्लासपाथ देखें। उपर्युक्त कमांड डिफ़ॉल्ट क्लासपैथ पर निर्भर है (या वर्तमान निर्देशिका सहित)। हम -cp विकल्प का उपयोग करके उपयोग किए जाने वाले classpath को निर्दिष्ट करके इसके बारे में अधिक स्पष्ट हो सकते हैं।

java -cp . HelloWorld

यह वर्तमान निर्देशिका बनाने के लिए कहता है (जो है ""। "संदर्भित करता है) क्लासपाथ पर एकमात्र प्रविष्टि।"

-cp एक विकल्प है जिसे java कमांड द्वारा संसाधित किया जाता है। java कमांड के लिए इच्छित सभी विकल्प क्लासनाम से पहले होने चाहिए। कक्षा के बाद कुछ भी जावा एप्लिकेशन के लिए कमांड लाइन तर्क के रूप में माना जाएगा, और String[] में आवेदन किया जाएगा जो main विधि से पारित हो जाएगा।

(यदि कोई -cp विकल्प प्रदान नहीं किया गया है, तो java क्लासपाथ का उपयोग करेगा जो CLASSPATH पर्यावरण चर द्वारा दिया गया है। यदि वह चर असंगत या रिक्त है, java उपयोग करता है "।" डिफ़ॉल्ट क्लासपैथ के रूप में। "

प्रवेश बिंदु वर्ग

एक जावा प्रविष्टि-बिंदु वर्ग में निम्नलिखित हस्ताक्षर और संशोधक के साथ एक main विधि है:

public static void main(String[] args)

Sidenote: क्योंकि सरणियाँ कैसे काम करती हैं, यह भी हो सकता है (String args[])

जब java कमांड वर्चुअल मशीन शुरू करता है, तो यह निर्दिष्ट एंट्री-पॉइंट क्लासेस को लोड करता है और main खोजने की कोशिश करता है। यदि सफल हो, कमांड लाइन से तर्क जावा String ऑब्जेक्ट में कनवर्ट किए जाते हैं और एक सरणी में इकट्ठे होते हैं। यदि main इस तरह शुरू हो जाती है, सरणी नहीं होगा null और किसी भी शामिल नहीं होंगे null प्रविष्टियों।

एक मान्य एंट्री-पॉइंट क्लास विधि निम्नलिखित करना चाहिए:

  • main नाम दें (केस-संवेदी)
  • public और static रहें
  • एक void वापसी प्रकार है
  • सरणी String[] साथ एक एकल तर्क रखें। तर्क मौजूद होना चाहिए और एक से अधिक तर्क की अनुमति नहीं है।
  • सामान्य रहें: टाइप पैरामीटर की अनुमति नहीं है।
  • एक गैर-जेनेरिक, शीर्ष-स्तर (नस्टेड या इनर) वर्ग को घेरना

वर्ग को public घोषित करना पारंपरिक है लेकिन यह कड़ाई से आवश्यक नहीं है। जावा 5 के बाद से, main विधि का तर्क प्रकार String बजाय एक String वेरिएग हो सकता है। main वैकल्पिक रूप से अपवादों को फेंक सकते हैं, और इसके पैरामीटर को कुछ भी नाम दिया जा सकता है, लेकिन परंपरागत रूप से यह args

JavaFX प्रवेश-अंक

जावा 8 से java कमांड भी सीधे JavaFX एप्लिकेशन लॉन्च कर सकता है। JavaFX को JavaFX टैग में प्रलेखित किया गया है, लेकिन एक JavaFX प्रवेश बिंदु को निम्न कार्य करना चाहिए:

  • javafx.application.Application बढ़ाएँ
  • public रहें और abstract नहीं
  • जेनेरिक या नेस्टेड न हों
  • एक स्पष्ट या निहित public नो-आर्ग कंस्ट्रक्टर रखें

'जावा' कमांड का समस्या निवारण

यह उदाहरण 'जावा' कमांड का उपयोग करने के साथ सामान्य त्रुटियों को शामिल करता है।

"आदेश नहीं मिला"

यदि आपको एक त्रुटि संदेश मिलता है जैसे:

java: command not found

जब java कमांड चलाने की कोशिश की जा रही है, इसका मतलब है कि आपके शेल के कमांड सर्च पथ पर कोई java कमांड नहीं है। इसका कारण हो सकता है:

  • आपके पास जावा JRE या JDK बिल्कुल भी स्थापित नहीं है,
  • आपने अपने शेल आरंभीकरण फ़ाइल में, या (सही ढंग से) PATH पर्यावरण चर को अद्यतन नहीं किया है
  • आपने वर्तमान शेल में प्रासंगिक इनिशियलाइज़ेशन फ़ाइल को "सॉर्स्ड" नहीं किया है।

उन चरणों के लिए "इंस्टॉल करने वाले जावा" का संदर्भ लें जिन्हें आपको लेने की आवश्यकता है।

"मुख्य वर्ग ढूंढ या लोड नहीं कर सका"

यह त्रुटि संदेश java कमांड द्वारा आउटपुट है यदि यह आपके द्वारा निर्दिष्ट प्रविष्टि-बिंदु वर्ग को खोजने / लोड करने में असमर्थ है। सामान्य शब्दों में, इसके तीन व्यापक कारण हो सकते हैं:

  • आपने एक प्रविष्टि बिंदु वर्ग निर्दिष्ट किया है जो मौजूद नहीं है।
  • वर्ग मौजूद है, लेकिन आपने इसे गलत तरीके से निर्दिष्ट किया है।
  • वर्ग मौजूद है और आपने इसे सही ढंग से निर्दिष्ट किया है, लेकिन जावा इसे नहीं खोज सकता क्योंकि वर्गपथ गलत है।

समस्या का निदान और समाधान करने के लिए यहां एक प्रक्रिया है:

  1. प्रवेश-बिंदु वर्ग का पूरा नाम ज्ञात कीजिए।

    • यदि आपके पास एक वर्ग के लिए स्रोत कोड है, तो पूरा नाम पैकेज के नाम और साधारण वर्ग के नाम से बना है। उदाहरण में "मुख्य" वर्ग पैकेज "com.example.myapp" में घोषित किया गया है, फिर इसका पूरा नाम "com.example.myapp.Main" है।
    • यदि आपके पास एक संकलित वर्ग फ़ाइल है, तो आप javap पर javap चलाकर वर्ग का नाम पा सकते हैं।
    • यदि वर्ग फ़ाइल किसी निर्देशिका में है, तो आप निर्देशिका नामों से पूर्ण वर्ग नाम का अनुमान लगा सकते हैं।
    • यदि क्लास फ़ाइल एक JAR या ZIP फ़ाइल में है, तो आप JAR या ZIP फ़ाइल में फ़ाइल पथ से पूर्ण वर्ग नाम का अनुमान लगा सकते हैं।
  2. java कमांड से त्रुटि संदेश देखें। संदेश को पूर्ण वर्ग नाम के साथ समाप्त होना चाहिए जिसे java उपयोग करने की कोशिश कर रहा है।

    • जांचें कि यह प्रवेश-बिंदु वर्ग के लिए पूर्ण क्लासनाम से मेल खाता है।
    • इसे ".java" या ".class" के साथ समाप्त नहीं होना चाहिए।
    • इसमें स्लैश या कोई अन्य वर्ण नहीं होना चाहिए जो कि जावा पहचानकर्ता 1 में कानूनी नहीं है।
    • नाम का आवरण पूरी तरह से पूर्ण वर्ग के नाम से मेल खाना चाहिए।
  3. यदि आप सही classname का उपयोग कर रहे हैं, तो सुनिश्चित करें कि वर्ग वास्तव में classpath पर है:

    • जिस मार्गनाम के लिए मैप करता है उसका पाथनेम तैयार करें; पाथने के लिए वर्ग के नाम मैपिंग देखें
    • क्लासपाथ क्या है बाहर काम करो; इस उदाहरण को देखें: क्लासपाथ को निर्दिष्ट करने के विभिन्न तरीके
    • क्लासपथ पर JAR और ZIP फ़ाइलों में से प्रत्येक को देखें कि क्या उनके पास आवश्यक pathname के साथ एक क्लास है।
    • यह देखने के लिए कि प्रत्येक निर्देशिका में पथनाम फ़ाइल के भीतर हल होता है या नहीं, प्रत्येक निर्देशिका को देखें।

अगर हाथ से -Xdiag जाँच करने पर समस्या नहीं मिली, तो आप -Xdiag और -XshowSettings विकल्प जोड़ सकते हैं। पूर्व सभी भरी हुई कक्षाओं को सूचीबद्ध करता है, और बाद वाली रूपरेखाएँ प्रिंट करती हैं जिसमें जेवीएम के लिए प्रभावी क्लासपैथ शामिल हैं।

अंत में, इस समस्या के कुछ अस्पष्ट कारण हैं:

  • एक निष्पादन योग्य JAR फ़ाइल एक Main-Class विशेषता के साथ जो उस Main-Class को निर्दिष्ट करती है जो मौजूद नहीं है।
  • गलत Class-Path विशेषता के साथ एक निष्पादन योग्य JAR फ़ाइल।
  • यदि आप classname से पहले 2 विकल्पों को गड़बड़ करते हैं, तो java कमांड उनमें से किसी एक को classname के रूप में व्याख्या करने का प्रयास कर सकता है।
  • यदि किसी ने जावा शैली के नियमों की अनदेखी की है और केवल पैकेज के मामले में पैकेज या क्लास आइडेंटिफ़ायर का उपयोग किया है, और आप एक ऐसे प्लेटफ़ॉर्म पर चल रहे हैं, जो फ़ाइल नाम में लेटर केस को गैर-महत्वपूर्ण मानता है।
  • कोड में या कमांड लाइन पर वर्ग नामों में सजातीय के साथ समस्याएं।

"मुख्य विधि कक्षा में नहीं मिली <name>"

यह समस्या तब होती है जब java कमांड उस वर्ग को खोजने और लोड करने में सक्षम होता है जिसे आपने नामांकित किया था, लेकिन फिर प्रवेश-बिंदु विधि खोजने में असमर्थ है।

तीन संभावित स्पष्टीकरण हैं:

  • यदि आप एक निष्पादन योग्य JAR फ़ाइल चलाने की कोशिश कर रहे हैं, तो JAR के प्रकट होने में एक गलत "मेन-क्लास" विशेषता है जो एक वर्ग को निर्दिष्ट करता है जो एक मान्य प्रवेश बिंदु वर्ग नहीं है।
  • आपने java कमांड को एक क्लास बताया है जो एंट्री पॉइंट क्लास नहीं है।
  • प्रवेश बिंदु वर्ग गलत है; अधिक जानकारी के लिए प्रवेश बिंदु वर्ग देखें।

अन्य संसाधन


1 - जावा 8 से और बाद में, java कमांड एक फ़ाइल नाम विभाजक ("/" या "") को एक अवधि (") में मैप करने में मदद करेगा। हालाँकि, यह व्यवहार मैन्युअल पृष्ठों में प्रलेखित नहीं है।

2 - वास्तव में अस्पष्ट मामला है यदि आप एक प्रारूपित दस्तावेज़ से एक कमांड को कॉपी-पेस्ट करते हैं जहां पाठ संपादक ने नियमित हाइफ़न के बजाय "लंबे हाइफ़न" का उपयोग किया है।

लायब्रेरी निर्भरता के साथ जावा अनुप्रयोग चलाना

यह "मुख्य वर्ग" और "निष्पादन योग्य जार" उदाहरणों की एक निरंतरता है।

विशिष्ट जावा अनुप्रयोगों में एक एप्लिकेशन-विशिष्ट कोड और विभिन्न पुन: प्रयोज्य पुस्तकालय कोड होते हैं जिन्हें आपने लागू किया है या जिन्हें तीसरे पक्ष द्वारा कार्यान्वित किया गया है। उत्तरार्द्ध को आमतौर पर पुस्तकालय निर्भरता के रूप में संदर्भित किया जाता है, और आमतौर पर JAR फ़ाइलों के रूप में पैक किया जाता है।

जावा एक गतिशील रूप से बाध्य भाषा है। जब आप लायब्रेरी निर्भरता के साथ Java अनुप्रयोग चलाते हैं, तो JVM को यह जानना होगा कि निर्भरताएँ कहाँ हैं ताकि यह आवश्यकतानुसार कक्षाओं को लोड कर सके। मोटे तौर पर, इससे निपटने के दो तरीके हैं:

  • एप्लिकेशन और इसकी निर्भरता को एक एकल JAR फ़ाइल में बदला जा सकता है जिसमें सभी आवश्यक वर्ग और संसाधन शामिल हैं।

  • JVM को बताया जा सकता है कि रनटाइम क्लासपाथ के माध्यम से आश्रित JAR फ़ाइलों को कहाँ खोजा जाए।

एक निष्पादन योग्य JAR फ़ाइल के लिए, रनटाइम क्लासपैथ "क्लास-पाथ" मैनिफ़ेस्ट विशेषता द्वारा निर्दिष्ट किया गया है। (संपादकीय नोट: इसे jar कमांड पर एक अलग विषय में वर्णित किया जाना चाहिए।) अन्यथा, रनटाइम क्लासपैथ को -cp विकल्प का उपयोग करके या CLASSPATH पर्यावरण चर का उपयोग करके आपूर्ति की जानी चाहिए।

उदाहरण के लिए, मान लें कि हमारे पास "myApp.jar" फ़ाइल में जावा अनुप्रयोग है जिसका प्रवेश बिंदु वर्ग com.example.MyApp । यह भी मान लें कि एप्लिकेशन लाइब्रेरी JAR फाइलों पर "lib / Library1.jar" और "lib / Library2.jar" पर निर्भर करता है। हम java कमांड का उपयोग करके एप्लिकेशन को एक कमांड लाइन में निम्नानुसार लॉन्च कर सकते हैं:

$ # Alternative 1 (preferred)
$ java -cp myApp.jar:lib/library1.jar:lib/library2.jar com.example.MyApp

$ # Alternative 2
$ export CLASSPATH=myApp.jar:lib/library1.jar:lib/library2.jar
$ java com.example.MyApp

(विंडोज पर, आप उपयोग करेंगे ; इसके बजाय : क्लासपैथ विभाजक के रूप में, और आप export बजाय set का उपयोग करके स्थानीय ( CLASSPATH ) चर set ।)

जबकि एक जावा डेवलपर इसके साथ सहज होगा, यह "उपयोगकर्ता के अनुकूल" नहीं है। इसलिए उन विवरणों को छिपाने के लिए एक साधारण शेल स्क्रिप्ट (या विंडोज बैच फ़ाइल) लिखना आम बात है, जिसके बारे में उपयोगकर्ता को जानने की आवश्यकता नहीं है। उदाहरण के लिए, यदि आपने "myApp" नामक एक फ़ाइल में निम्नलिखित शेल स्क्रिप्ट को रखा, तो इसे निष्पादन योग्य बना दिया, और इसे कमांड सर्च पथ पर एक डायरेक्टरी में रखा:

#!/bin/bash
# The 'myApp' wrapper script

export DIR=/usr/libexec/myApp
export CLASSPATH=$DIR/myApp.jar:$DIR/lib/library1.jar:$DIR/lib/library2.jar
java com.example.MyApp

तो आप इसे निम्नानुसार चला सकते हैं:

$ myApp arg1 arg2 ...

कमांड लाइन पर कोई भी तर्क "$@" विस्तार के माध्यम से जावा एप्लिकेशन को पास किया जाएगा। (आप Windows बैच फ़ाइल के साथ कुछ ऐसा ही कर सकते हैं, हालांकि वाक्य रचना अलग है।)

तर्कों में स्थान और अन्य विशेष पात्र

सबसे पहले, तर्कों में रिक्त स्थान को संभालने की समस्या वास्तव में एक जावा समस्या नहीं है। बल्कि यह एक समस्या है जिसे कमांड प्रोग्राम द्वारा उपयोग करने की आवश्यकता है जिसे आप जावा प्रोग्राम चलाते समय उपयोग कर रहे हैं।

एक उदाहरण के रूप में, मान लें कि हमारे पास निम्न सरल प्रोग्राम है जो किसी फ़ाइल के आकार को प्रिंट करता है:

import java.io.File;

public class PrintFileSizes {
    
    public static void main(String[] args) {
        for (String name: args) {
            File file = new File(name);
            System.out.println("Size of '" + file + "' is " + file.size());
        }
    }
}

अब मान लीजिए कि हम एक फ़ाइल का आकार प्रिंट करना चाहते हैं, जिसका पथनाम इसमें रिक्त स्थान है; उदाहरण के लिए /home/steve/Test File.txt/home/steve/Test File.txt । यदि हम इस तरह से कमांड चलाते हैं:

$ java PrintFileSizes /home/steve/Test File.txt

शेल को यह पता नहीं होगा कि /home/steve/Test File.txt वास्तव में एक pathname है। इसके बजाय, यह जावा एप्लिकेशन को 2 अलग-अलग तर्क देगा, जो उनके संबंधित फ़ाइल आकारों को खोजने का प्रयास करेगा, और विफल हो जाएगा क्योंकि उन रास्तों वाली फाइलें (शायद) मौजूद नहीं हैं।

POSIX शेल का उपयोग करके समाधान

पोसिक्स के गोले में sh साथ-साथ bash और ksh जैसे डेरिवेटिव भी शामिल हैं। यदि आप इनमें से किसी एक गोले का उपयोग कर रहे हैं, तो आप तर्क को उद्धृत करके समस्या को हल कर सकते हैं।

$ java PrintFileSizes "/home/steve/Test File.txt"

पाथनाम के आसपास के दोहरे उद्धरण शेल को बताते हैं कि इसे एकल तर्क के रूप में पारित किया जाना चाहिए। ऐसा होने पर उद्धरण हटा दिए जाएंगे। ऐसा करने के लिए कुछ अन्य तरीके हैं:

$ java PrintFileSizes '/home/steve/Test File.txt'

सिंगल (स्ट्रेट) कोट्स को डबल-कोट्स की तरह माना जाता है, सिवाय इसके कि वे तर्क के भीतर विभिन्न विस्तार को भी दबा देते हैं।

$ java PrintFileSizes /home/steve/Test\ File.txt

एक बैकस्लैश निम्नलिखित स्थान से बच जाता है, और इसका कारण तर्क विभाजक के रूप में व्याख्या नहीं किया जाता है।

अधिक व्यापक प्रलेखन के लिए, तर्कों में अन्य विशेष पात्रों से निपटने के तरीके सहित विवरण, कृपया बैश प्रलेखन में उद्धृत विषय को देखें।

विंडोज के लिए समाधान

विंडोज के लिए मौलिक समस्या यह है कि ओएस स्तर पर, एक स्ट्रिंग ( स्रोत ) के रूप में तर्क को एक बच्चे की प्रक्रिया में पारित किया जाता है। इसका मतलब यह है कि कमांड लाइन को पार्स करने (या फिर से पार्स करने) की अंतिम जिम्मेदारी प्रोग्राम या उसके रनटाइम लाइब्रेरी पर आती है। बहुत सारी असंगति है।

जावा मामले में, एक लंबी कहानी को छोटा करने के लिए:

  • आप एक java कमांड में एक तर्क के आसपास दोहरे उद्धरण लगा सकते हैं, और यह आपको उनमें रिक्त स्थान के साथ तर्क पारित करने की अनुमति देगा।

  • जाहिरा तौर पर, java कमांड स्वयं कमांड स्ट्रिंग को पार्स कर रहा है, और यह इसे कम या ज्यादा अधिकार प्राप्त करता है

  • हालाँकि, जब आप एक बैच फ़ाइल में SET और चर प्रतिस्थापन के उपयोग के साथ इसे संयोजित करने का प्रयास करते हैं, तो यह वास्तव में जटिल हो जाता है कि क्या डबल-उद्धरण हटा दिए जाते हैं।

  • cmd.exe शेल में स्पष्ट रूप से अन्य बचने वाले तंत्र हैं; उदाहरण के लिए डबल-कोट्स को डबल करना, और ^ का उपयोग करना।

अधिक विवरण के लिए, कृपया बैच-फ़ाइल प्रलेखन देखें।

जावा विकल्प

java कमांड विकल्पों की एक विस्तृत श्रृंखला का समर्थन करता है:

  • सभी विकल्प एक भी हाइफन या ऋण हस्ताक्षर के साथ शुरू ( - ): का उपयोग करने का जीएनयू / लिनक्स सम्मेलन -- "लंबे समय" विकल्प के लिए समर्थित नहीं है।

  • मान्यता प्राप्त करने के लिए विकल्प <classname> या -jar <jarfile> तर्क से पहले प्रदर्शित होने चाहिए। उनके बाद होने वाले किसी भी तर्क को चलाया जा रहा है जिसे जावा ऐप में चलाया जा रहा है।

  • विकल्प जो -X या -XX साथ शुरू नहीं -XX हैं वे मानक विकल्प हैं। आप किसी भी मानक विकल्प का समर्थन करने के लिए सभी जावा कार्यान्वयन 1 पर भरोसा कर सकते हैं।

  • -X साथ शुरू होने वाले विकल्प गैर-मानक विकल्प हैं, और एक जावा संस्करण से अगले तक वापस लिया जा सकता है।

  • -XX साथ शुरू होने वाले विकल्प उन्नत विकल्प हैं, और उन्हें वापस भी लिया जा सकता है।

-D साथ सिस्टम गुण सेट करना

-D<property>=<value> विकल्प का उपयोग सिस्टम Properties ऑब्जेक्ट में Properties सेट करने के लिए किया जाता है। विभिन्न गुणों को सेट करने के लिए इस पैरामीटर को दोहराया जा सकता है।

मेमोरी, स्टैक और गारबेज कलेक्टर विकल्प

ढेर और स्टैक आकार को नियंत्रित करने के लिए मुख्य विकल्प ढेर, पर्मगेन और स्टैक आकारों की स्थापना में प्रलेखित हैं(संपादकीय नोट: कचरा कलेक्टर विकल्प एक ही विषय में वर्णित किया जाना चाहिए।)

दावे को सक्षम और अक्षम करना

-ea और -da विकल्पों क्रमशः सक्षम और अक्षम जावा assert जाँच:

  • डिफ़ॉल्ट रूप से सभी दावे की जाँच अक्षम है।
  • -ea विकल्प सभी -ea जाँच करने में सक्षम बनाता है
  • -ea:<packagename>... एक पैकेज और सभी -ea:<packagename>... में अभिकथन की जाँच करने में सक्षम बनाता है।
  • -ea:<classname>... एक कक्षा में अभिकथन की जाँच करने में सक्षम बनाता है।
  • -da विकल्प सभी -da जाँच अक्षम करता है
  • -da:<packagename>... एक पैकेज और सभी -da:<packagename>... में अभिकथन की जाँच को अक्षम करता है।
  • -da:<classname>... एक कक्षा में मुखरता की जाँच को अक्षम करता है।
  • -esa विकल्प सभी सिस्टम कक्षाओं के लिए जाँच करने में सक्षम बनाता है।
  • -dsa विकल्प सभी सिस्टम वर्गों के लिए जाँच अक्षम करता है।

विकल्प संयुक्त हो सकते हैं। उदाहरण के लिए।

$ # Enable all assertion checking in non-system classes 
$ java -ea -dsa MyApp

$ # Enable assertions for all classes in a package except for one.
$ java -ea:com.wombat.fruitbat... -da:com.wombat.fruitbat.Brickbat MyApp

ध्यान दें कि एक जावा प्रोग्रामिंग के व्यवहार को बदलने के लिए अभिकथन जाँच सक्षम करना उत्तरदायी है।

  • यह सामान्य रूप से आवेदन को धीमा करने के लिए उत्तरदायी है।
  • यह विशिष्ट तरीकों को चलाने में अधिक समय ले सकता है, जो बहु-थ्रेडेड अनुप्रयोग में थ्रेड्स के समय को बदल सकता है।
  • यह लागू कर सकते हैं आकस्मिक लाभ होता है-पहले संबंधों जो स्मृति विसंगतियों गायब हो सकता है।
  • गलत तरीके से लागू किए गए assert बयान के अवांछित दुष्प्रभाव हो सकते हैं।

VM प्रकार का चयन करना

-client और -server विकल्प आप हॉटस्पॉट वी एम के दो विभिन्न रूपों के बीच चयन करने के लिए अनुमति देते हैं:

  • "क्लाइंट" फ़ॉर्म को उपयोगकर्ता अनुप्रयोगों के लिए तैयार किया गया है और तेजी से स्टार्टअप प्रदान करता है।
  • "सर्वर" फ़ॉर्म को लंबे समय तक चलने वाले अनुप्रयोगों के लिए तैयार किया गया है। यह JVM "वार्म अप" के दौरान आँकड़ा कैप्चर करने में अधिक समय लेता है जो JIT कंपाइलर को देशी कोड के अनुकूलन के बेहतर कार्य करने की अनुमति देता है।

डिफ़ॉल्ट रूप से, जेवीएम 64 बिट मोड में चलेगा, यदि संभव हो तो, प्लेटफॉर्म की क्षमताओं के आधार पर। -d32 और -d64 विकल्प आपको स्पष्ट रूप से मोड का चयन करने की अनुमति देते हैं।


1 - java कमांड के लिए आधिकारिक मैनुअल की जाँच करें। कभी-कभी एक मानक विकल्प को "परिवर्तन के अधीन" के रूप में वर्णित किया जाता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow