आभासी जावा. JVM (जावा व्हर्च्युअल मशीन). पर्यावरण व्हेरिएबल सेट करणे

नोकिया 09.04.2019
नोकिया

Java bytecode मध्ये संकलित केले जाऊ शकते, जे नंतर JVM द्वारे कार्यान्वित केले जाऊ शकते.

JVM आहे मुख्य घटकजावा प्लॅटफॉर्म. जावा व्हर्च्युअल मशीन अनेक हार्डवेअरसाठी उपलब्ध असल्याने आणि सॉफ्टवेअर प्लॅटफॉर्म, जावा देखील एक गोंद म्हणून मानले जाऊ शकते सॉफ्टवेअर, आणि एक स्वतंत्र व्यासपीठ म्हणून, म्हणून "एकदा लिहा, कुठेही चालवा" हे तत्त्व आहे. बऱ्याच प्लॅटफॉर्मसाठी एक बाइटकोड वापरल्याने Java ला “एकदा संकलित करा, कुठेही चालवा” असे वर्णन करता येते.

JVM तपशील

सन आणि आयबीएम यांच्यात सामना

2001 मध्ये, क्रॉस-प्लॅटफॉर्म डेस्कटॉप ऍप्लिकेशन्ससाठी एक मानक विकसित करण्याच्या उद्दिष्टासह, Eclipse.

IBM व्हिज्युअल एज. FSF द्वारे मान्यताप्राप्त Eclipse Public License मध्ये IBM ने मुक्त समुदायाचे हित आणि व्यवसायाचे हित (त्याच्या आवडी) यांच्यात समतोल राखला.

प्रकल्प यशस्वीरित्या विकसित होत आहे, उद्योगाद्वारे मान्यताप्राप्त आहे, आणि मोठ्या प्रमाणात IBM पासून स्वतंत्र Eclipse Foundation मध्ये विभक्त झाला आहे.


विकिमीडिया फाउंडेशन. 2010.

इतर शब्दकोशांमध्ये "जावा व्हर्च्युअल मशीन" काय आहे ते पहा:

    जावा आभासी मशीन- सादरीकरणाचा मुख्य भाग जावा प्रणाली (जावा रनटाइमवातावरण; JRE). आभासी java मशीनपूर्वी तयार केलेल्या Java बाइट कोडचा अर्थ लावतो आणि कार्यान्वित करतो स्त्रोत मजकूरजावा कंपाइलरद्वारे जावा प्रोग्राम. JVM यासाठी वापरले जाऊ शकते... - JavaSoft ने विकसित केले आहे. वेब अनुप्रयोग, ते वापरून तयार केलेले नैसर्गिकरित्या आत अंमलात आणले जाऊ शकते ऑपरेटिंग सिस्टम, किंवा अंतर्जाल शोधक, किंवा इम्युलेशन वातावरणात म्हणून ओळखले जाते आभासी यंत्र, आभासी साधनजावा... शब्दकोश ई-व्यवसाय

    - (JPF) विनामूल्य साधनमल्टी-थ्रेडेड Java प्रोग्राम्सच्या चाचणीसाठी. त्याच्या केंद्रस्थानी, हे जावा व्हर्च्युअल मशीन आहे ज्याच्या आधारावर मॉडेल तपासणी पद्धती लागू केल्या जातात. याचा अर्थ... ... विकिपीडिया

    जावा व्हर्च्युअल मशीन- जावा प्रोग्राम्ससाठी बाइट कोड इंटरप्रिटर. Java ऍपलेट कार्यान्वित करण्यासाठी डिझाइन केलेले आभासी मशीन. JVM बहुतेक वेब ब्राउझरमध्ये अंगभूत आहे. हे तुम्हाला क्लायंटच्या बाजूने जावा ऍपलेट कार्यान्वित करण्यास अनुमती देते, ज्याचे कॉल प्रदान केले जातात ... ... तांत्रिक अनुवादक मार्गदर्शक

    या संकल्पनेचे दुसरे नाव आहे “जावा”; इतर अर्थ देखील पहा. JavaScript सह गोंधळून जाऊ नये. जावा वर्गभाषा... विकिपीडिया

    भाषांतराची गुणवत्ता तपासणे आणि विकिपीडियाच्या शैलीत्मक नियमांचे पालन करून लेख आणणे आवश्यक आहे. तुम्ही चुका सुधारून हा लेख सुधारण्यास मदत करू शकता. मूळ n... विकिपीडिया

JVM हा Java प्लॅटफॉर्मचा प्रमुख घटक आहे. Java व्हर्च्युअल मशीन Java कंपाइलर (javac) द्वारे Java प्रोग्रामच्या स्त्रोत मजकूरातून पूर्व-निर्मित Java bytecode चा अर्थ लावते आणि कार्यान्वित करते.

जावा व्हर्च्युअल मशीन अनेक हार्डवेअर आणि सॉफ्टवेअर प्लॅटफॉर्मसाठी उपलब्ध असल्याने, Java ला मिडलवेअर आणि स्वतःचे एक प्लॅटफॉर्म म्हणून मानले जाऊ शकते, म्हणून "एकदा लिहा, कुठेही चालवा" तत्त्व. एकाधिक प्लॅटफॉर्मवर एकल बाइटकोड वापरणे Java ला "एकदा संकलित करा, कुठेही चालवा" असे वर्णन करण्यास अनुमती देते.

JVM वर चालवण्याच्या उद्देशाने प्रोग्रॅम प्रमाणित पोर्टेबल बायनरी फॉरमॅटमध्ये संकलित करणे आवश्यक आहे, जे सहसा .class फायली म्हणून दर्शविले जाते. प्रोग्राममध्ये अनेक वर्ग असू शकतात विविध फाइल्स. प्लेसमेंट सोपे करण्यासाठी मोठे कार्यक्रम, .क्लास फॉर्मच्या काही फाइल्स एका तथाकथित .jar फाइलमध्ये एकत्रित केल्या जाऊ शकतात (जावा संग्रहणासाठी लहान).

JVM व्हर्च्युअल मशीन फाइल्स कार्यान्वित करते .वर्गकिंवा .जर, हॉटस्पॉट सारख्या जस्ट-इन-टाइम (JIT) कंपाइलरचा अर्थ लावून किंवा वापरून JVM साठी लिहिलेल्या सूचनांचे अनुकरण करणे सन मायक्रोसिस्टम्स. आजकाल, JIT संकलन बहुतेक JVM मध्ये साध्य करण्यासाठी वापरले जाते उच्च गती. अगोदर-ऑफ-टाइम कंपाइलर देखील आहेत जे ॲप्लिकेशन डेव्हलपरला प्लॅटफॉर्म-विशिष्ट मूळ कोडमध्ये क्लास फाइल्स प्री-कंपाइल करण्याची परवानगी देतात.

जेव्हीएम, जे जेआरई (जावा रनटाइम एन्व्हायर्नमेंट) चे उदाहरण आहे, ते कार्यान्वित केल्यावर कार्यात येते जावा प्रोग्राम्स. अंमलबजावणी पूर्ण झाल्यानंतर, हे उदाहरण कचरा गोळा करणाऱ्याद्वारे हटवले जाते. JIT हा Java Virtual Machine चा एक भाग आहे ज्याचा वापर ऍप्लिकेशन्सच्या अंमलबजावणीच्या वेळेला गती देण्यासाठी केला जातो. JIT एकाच वेळी बायकोडचे भाग संकलित करते ज्यात समान कार्यक्षमता असते आणि त्यामुळे संकलनासाठी लागणारा वेळ कमी होतो.

JVM एक स्टॅक मशीन आहे. याचा अर्थ त्याच्याकडे कोणतेही रजिस्टर नाहीत सामान्य हेतू, आणि ऑपरेशन स्टॅकवरील डेटावर केले जातात. प्रत्येक फ्रेममध्ये वाटप केलेल्या ऑपरेंड स्टॅकद्वारे हा उद्देश पूर्ण केला जातो. जेव्हा Java bytecode कमांड्स ज्या डेटामध्ये बदल करतात ते कार्यान्वित केले जातात, तेव्हा त्या कमांडचे ऑपरेंड ऑपरेंड स्टॅकमधून पॉप केले जातात आणि कमांडचे परिणाम त्याच स्टॅकवर ढकलले जातात.

पद्धतीच्या रनटाइममध्ये डायनॅमिक बाइंडिंग, पद्धत परतावा आणि अपवाद हाताळणीसाठी आवश्यक माहिती असते. वर्ग कोड (वर्ग क्षेत्रात ठेवलेला) प्रवेश करतो बाह्य पद्धतीआणि व्हेरिएबल्स वापरणे प्रतीकात्मक दुवे. डायनॅमिक लिंकिंग प्रतीकात्मक दुव्यांचे वास्तविक दुव्यांमध्ये भाषांतर करते. रनटाइम वातावरणात मेथड सिम्बॉल टेबलचे संदर्भ असतात, ज्याद्वारे बाह्य पद्धती आणि व्हेरिएबल्सना कॉल केले जातात.

रनटाइममध्ये परत येण्याच्या पद्धतीसाठी आवश्यक माहिती देखील असते: एक फ्रेम पॉइंटर कॉलिंग पद्धत, रिटर्नसाठी पीसी रजिस्टरचे मूल्य, कॉलिंग पद्धतीच्या रजिस्टरमधील सामग्री आणि रिटर्न व्हॅल्यू लिहिण्यासाठी क्षेत्राकडे एक पॉइंटर.

अपवाद हाताळणी माहितीमध्ये वर्ग पद्धतीच्या अपवाद हाताळणी विभागांचे संदर्भ असतात.

रनटाइम स्थिरांक आणि वर्ग व्हेरिएबल्ससह वर्ग क्षेत्रामध्ये असलेल्या डेटाचा संदर्भ देखील देते.

JVM सूचनांमध्ये एक-बिट ऑपकोड असतो आणि त्यात ऑपरेंड देखील असू शकतात. ऑपकोडद्वारे ऑपरेंडची संख्या आणि आकार निश्चित केला जातो;

बरीच चांगली आणि योग्य उत्तरे येथे आधीच दिली गेली आहेत, परंतु मी हे स्पष्ट करू इच्छितो की हे रूपक आहे:

Java आभासी मशीन देखील मूलत: एक दुभाषी आहे

तुम्हाला खूप चुकीच्या मार्गावर नेऊ शकते!

नावांमधील शब्दांचा अगदी अचूक अर्थ आहे आणि JVM तंतोतंत म्हणतात कारने, आणि दुभाषी नाही, आणि कंपाइलर नाही, अजिबात अपघाती नाही. Java (javac) मध्ये एक कंपाइलर आहे, आणि तो प्रोग्राम कार्यान्वित करण्यासाठी नाही, परंतु विशेषत: त्याचे संकलन करण्यासाठी (बाईटेकोडमध्ये) आवश्यक आहे. म्हणूनच ते JRE (रनटाइम वातावरण) मध्ये समाविष्ट केलेले नाही, परंतु JDK (विकास वातावरण) मध्ये समाविष्ट आहे. JVM मध्ये स्वतःच आणखी एक आहे, एक JIT कंपाइलर, जो प्रोग्रॅमच्या अंमलबजावणीदरम्यान प्रोसेसर सूचनांमध्ये बाइटकोड संकलित करतो, परंतु ती दुसरी कथा आहे आणि त्याला दुभाषी देखील म्हटले जाऊ शकत नाही.

मूलत:, JVM हा एक प्रोसेसर आहे, फक्त एक आभासी आहे. आणि कोणत्याही प्रोसेसरप्रमाणे (हार्डवेअर, x86 प्रकार, किंवा व्हर्च्युअल, .NET मध्ये CLR टाइप करा), त्याचा स्वतःचा संच आहे. कोडबाइट म्हणतात कोड. ज्याप्रमाणे x86 C++, किंवा पास्कल, किंवा Go सह कंपायलरद्वारे व्युत्पन्न केलेला कोड चालवू शकतो, त्याचप्रमाणे JVM Java, किंवा Scala, किंवा Kotlin (किंवा हाताने लिहिलेले) वरून संकलित केलेले bytecode चालवू शकते आणि .class -file हे मूलत: आहे. समान .exe (अधिक तंतोतंत .so), “JVM प्रोसेसर” साठी संकलित. क्रॉस-प्लॅटफॉर्म हेच आहे. ज्याप्रमाणे x86 साठी संकलित केलेला कोड इंटेल किंवा AMD च्या प्रोसेसरवर चालेल, त्याचप्रमाणे JVM bytecode Oracle, IBM, OpenJDK इ.च्या JVM वर चालेल. आणि अगदी JIT ची उपस्थिती, संकलनएक्झिक्यूशन दरम्यान विशिष्ट हार्डवेअर प्रोसेसरच्या opcode मध्ये bytecode तरीही प्रामाणिक स्टॅक (SUN) किंवा नोंदणी (Dalvik) VM ला दुभाषी म्हणण्याचे कारण देत नाही, जरी केवळ सारात :)

वस्तुस्थिती अशी आहे की हे वर्गीकरण स्वतःच (व्याख्यात/संकलित LANGUAGE) अलीकडील वर्षे 25 व्यावहारिकदृष्ट्या निरर्थक आहे. एपीएल किंवा बेसिक सारख्या भाषा ज्या सुरुवातीला दुभाष्याच्या रूपात (फक्त पार्स केलेल्या शब्दसंग्रहासह, जेणेकरुन दुभाषी लहान असेल आणि प्रोग्रामसाठी पुरेशी जागा सोडू शकेल) च्या रूपात अंमलबजावणीकडे केंद्रित होती, जसे की APL किंवा BASIC, आता (वगळून) , अर्थातच, अत्यंत विशेषीकृत अनुप्रयोगांसाठी) केवळ जुन्या पाठ्यपुस्तकांमध्ये सन्मानाचे स्थान आहे, ज्यापैकी हे वर्गीकरण योग्य आहे सर्वोत्तम वापरचिकाटी, ते नवीन शब्दांकरिता शब्द पुन्हा लिहिणे सुरू ठेवतात. त्याच वेळी, काही कारणास्तव, ते हे स्पष्ट करणे विसरले की या दोन संकल्पना आता भाषांबद्दल नाहीत, परंतु केवळ त्यांच्या अंमलबजावणीच्या काही पद्धतींबद्दल आहेत आणि तेव्हापासून, या पद्धतींव्यतिरिक्त, इतर अनेक चांगल्या आणि या विषयावरील विविध संकल्पना प्रकट झाल्या आहेत (जसे की VM, JIT, कचरा गोळा करणारे, आणि किमान समान OOP, वेगळे प्रकारटायपिफिकेशन्स आणि इतर दशलक्ष गोष्टी), जे त्यांच्या प्रकाशनाच्या वर्षामुळे त्या पाठ्यपुस्तकांमध्ये अद्याप नव्हते. आणि आज, सी सारख्या रजिस्टर आर्किटेक्चरच्या संकलनासाठी मूलभूतपणे तयार केलेल्या भाषांसाठी देखील, डझनभर दुभाषी आहेत (एक, दोन, तीन) ... ज्यांना पुन्हा, कोणीही नाव देत नाही. आभासी मशीन, कारण या सर्व भिन्न संकल्पना आहेत. थोडक्यात, क्वांटम मेकॅनिक्समध्ये अग्नि, पाणी, पृथ्वी आणि हवा कोठे आहेत हे समजून घेण्याचा प्रयत्न करण्यासारखे आहे, जसे की प्लेटो आणि ॲरिस्टॉटलने त्यांना समजले :)

P.S. हे वर्गीकरण केव्हा संबंधित होते हे समजून घेण्यासाठी, मी शिफारस करतो हे. तेथे, एपीएलचे निर्माते, प्रथम खऱ्या अर्थ लावलेल्या भाषांपैकी एक, चर्चा करतात दाबण्याच्या समस्यात्या काळातील भाषाशास्त्र. तुम्हाला इंग्रजीचा त्रास होत असेल तर निदान परिचय बघा... त्या लोखंडाच्या तुकड्यांमध्ये होती कमी स्मरणशक्तीआणि संगणकीय शक्तीआधुनिक सिमकार्डपेक्षा :)

JVM ची रचना C आणि C++ सारख्या भाषांमधील प्रोग्रामिंग अनुभवाच्या अनेक वर्षांच्या आधारे विकसित केली गेली. यामुळे आम्हाला एक JVM रचना तयार करण्याची परवानगी मिळाली ज्यामुळे प्रोग्रामरचे जीवन खूप सोपे झाले:

  • अनुप्रयोग कोड कंटेनरमध्ये चालतो,
  • एक संरक्षित कार्यक्रम अंमलबजावणी वातावरण आहे,
  • मेमरी व्यवस्थापित करण्याची प्रोग्रामरची क्षमता कमीतकमी कमी केली गेली आहे,
  • अंमलबजावणीचे वातावरण क्रॉस-प्लॅटफॉर्म बनवले गेले होते,
  • रनटाइम (प्रोग्राम अंमलबजावणी दरम्यान) स्वयं-व्यवस्थापनासाठी माहिती वापरली जाऊ लागली.

हा शेवटचा पैलू JVM ला अधिक स्वीकारण्याची परवानगी देतो इष्टतम उपायप्रोग्राम कार्यान्वित करताना, त्यातील काही ब्लॉक्स किती वेळा कॉल केले जातात यावर आधारित. व्हर्च्युअल मशीन स्वतःच संकलित केलेल्या Java प्रोग्रामच्या बाइट कोडचा अर्थ लावते, परंतु JVM मध्ये प्रोग्राम ब्लॉक्सना वारंवार संकलित करणे शक्य आहे. मशीन कोडरनटाइम मध्ये. या तंत्रज्ञानाला Jast-in-time (JIT) म्हणतात. याचा अर्थ असा नाही की मशीन कोड प्रोग्राम फाइलमध्ये जतन केला जाईल, तो फक्त त्याच्या अंमलबजावणी दरम्यान अस्तित्वात असेल. यादृच्छिक प्रवेश मेमरी. अशा प्रकारे, जावा प्रोग्रामचे कार्यप्रदर्शन, ऑपरेशनच्या अनेक चक्रांनंतर, पेक्षा जास्त होऊ शकते समान कार्यक्रमसंकलित भाषा C आणि C++.

बाइटकोड म्हणजे काय?
जेव्हा विकासकांना प्रथम JVM ची ओळख करून दिली जाते, तेव्हा ते कधीकधी संगणकामधील संगणक म्हणून विचार करतात. म्हणून, प्रोसेसरसाठी मशीन कोड म्हणून बाइटकोडचे प्रतिनिधित्व करणे सोपे आहे अंतर्गत संगणककिंवा काल्पनिक प्रोसेसरसाठी मशीन कोड.

खरं तर, बायकोड मशीन कोड सारखा नाही जो चालवला जाईल वास्तविक प्रोसेसर. तज्ञ बाइटकोडला मध्यवर्ती प्रतिनिधित्व म्हणतात, स्त्रोत कोड आणि मशीन कोड यांच्यातील रुपांतर.

बाइटकोडचे अंतिम उद्दिष्ट असे डेटा प्रतिनिधित्व स्वरूप आणि आहे नियंत्रण माहिती, JVM द्वारे कार्यक्षमतेने अंमलात आणण्यासाठी.

त्याला बाइटकोड का म्हटले गेले?
इंस्ट्रक्शन कोड (opcode opcode) फक्त एक बाइट आहे (काही ऑपरेशन्समध्ये पॅरामीटर्स असतात जे ऑपरेशन बाइटला बाइट्सचा प्रवाह म्हणून फॉलो करतात), त्यामुळे फक्त 256 इंस्ट्रक्शन व्हेरियंट आहेत. सराव मध्ये, काही वापरले जात नाहीत, सुमारे 200 वापरात सोडले, परंतु त्यापैकी काही वापरले गेले नाहीत नवीनतम आवृत्ती javac

कंपाइलर javac आहे का?
सामान्यतः, कंपाइलर मशीन कोड तयार करतो आणि javac मशीन कोडसारखा नसलेला बायटेकोड तयार करतो. तथापि, क्लास फाइल्स थोड्या ऑब्जेक्ट फाइल्ससारख्या असतात (जसे की Windows *.dll किंवा Unix *.so) आणि वाचता येत नाही.

कॉम्प्युटर सायन्सच्या दृष्टीने, javac हे फ्रन्ट-एंड कंपाइलरसारखे आहे जे मध्यवर्ती प्रतिनिधित्व तयार करते. प्रोग्राम कोड, ज्यावरून नंतर मशीन कोड तयार केला जाऊ शकतो.

अशा प्रकारे मध्ये शुद्ध स्वरूप javac हा संकलक नाही, परंतु बहुतेक पुस्तके आणि लेखांमध्ये आपण असे वाक्यांश पाहू शकता - source code compiler किंवा javac compiler. आणि प्रत्यक्ष संकलन JIT द्वारे केले जाते, जेव्हा ते प्रोग्राम एक्झिक्यूशन ऑप्टिमाइझ करण्यासाठी मशीन कोड तयार करते.

बाइटकोड ऑप्टिमाइझ केला आहे का?
javac च्या सुरुवातीच्या आवृत्त्यांनी अत्यंत ऑप्टिमाइझ केलेले bytecode तयार केले. हे चुकीचे असल्याचे निष्पन्न झाले. जेआयटी संकलनाच्या आगमनाने, ते अधिक महत्त्वाचे झाले आहे जलद पावतीमशीन कोड. म्हणून, असे दिसून आले की जेआयटी सहजपणे संकलित केले जाईल असे बायकोड तयार करणे आवश्यक आहे. म्हणून, आता बायकोडची इष्टतमता आणि त्याच्या JIT संकलनाची गती यामध्ये एक तडजोड आहे. या बदल्यात, बाइटकोडच्या काही भागाचा अर्थ लावला जात आहे.

बायकोड खरोखर मशीन स्वतंत्र आहे का? बाइट ऑर्डरचे काय?
बाइट कोड फॉरमॅट नेहमी सारखाच असतो, तो कोणत्या मशीनवर तयार केला होता हे महत्त्वाचे नाही, ते नेहमी मोठे-एंडियन (सर्वात लक्षणीय ते कमीतकमी लक्षणीय) असते. उदाहरणार्थ, मेमरीमध्ये 4 बाइट्स व्यापणारा पूर्णांक तेथे उच्च ते निम्न पर्यंत बाइट बाय बाइट संग्रहित केला जातो.

जावा ही व्याख्या केलेली भाषा आहे का?
मूलत: JVM एक दुभाषी आहे (JIT संकलनासह, जे कार्यक्षमतेला चालना देते). प्रत्यक्षात स्रोत Java अंमलबजावणीसाठी इंटरप्रिटरकडे पाठवले जात नाही, ते बायकोडमध्ये संकलित केले जाते आणि बायटेकोडचा JVM द्वारे अर्थ लावला जातो.

JVM वर इतर भाषा चालू शकतात का?
बायकोडमध्ये संकलित केलेली कोणतीही गोष्ट JVM वर कार्यान्वित केली जाऊ शकते. स्काला, क्लोजर, कोटलिन इत्यादी भाषांची उदाहरणे आहेत.
याव्यतिरिक्त, जावामध्ये विशिष्ट भाषेसाठी दुभाषी कार्यान्वित करणे शक्य आहे. हे कसे केले जाते, उदाहरणार्थ, JRuby भाषेसाठी.

बाइट कोड पाहण्यासाठी, फक्त .class फाईल सोप्या भाषेत उघडा मजकूर संपादक. ते स्पष्टपणे अवाचनीय असेल. तथापि, आमच्याकडे ते बायकोड नेमोनिक्समध्ये वेगळे करण्याची क्षमता आहे, म्हणजे, प्राथमिक सूचना (ज्या वाचल्या जाऊ शकतात) आणि डेटामध्ये.

चला विचार करूया एक साधा कार्यक्रमदोन संख्या जोडणे.

सार्वजनिक वर्ग मुख्य ( /** * पद्धत जी दोन संख्या जोडते. * @param a पहिली संज्ञा * @param b दुसरी टर्म * @दोन संख्या जोडण्याचा परिणाम परत करा. */ खाजगी स्थिर int adding(int a, int b ) ( परत करा a + b; ) /** * प्रोग्राम एंट्री पॉइंट * @param args न वापरलेले पॅरामीटर्सकमांड लाइन. */ पब्लिक स्टॅटिक व्हॉईड मेन(स्ट्रिंग आर्ग्स) ( // फर्स्ट टर्म int x = 43; // दुसरी टर्म int y = 56; // दोन व्हेरिएबल्सची व्हॅल्यू जोडणे आणि // परिणाम व्हेरिएबलमध्ये ठेवणे. int परिणाम = जोडणे(x, y); // System.out.println(परिणाम);

सोयीसाठी, तुम्ही Idea मध्ये रिक्त प्रकल्प तयार करू शकता आणि हा वर्ग src फोल्डरमध्ये ठेवू शकता.
अंमलबजावणीसाठी चालवा. आयडिया ते संकलित करेल, नैसर्गिकरित्या यासाठी javac वापरून, Main.class फाईल तयार करेल आणि अंमलबजावणीसाठी लॉन्च करेल. चला तपासूया की सर्वकाही कार्य केले आहे, संख्यांची बेरीज कन्सोलमध्ये दिसली पाहिजे.

नंतर तुमच्या प्रोजेक्टच्या फोल्डरमधील टर्मिनलवर जा आणि नंतर ते जेथे तयार केले जावे त्या फोल्डरवर जा वर्ग फाइल. हे आउट/प्रॉडक्शन फोल्डरमध्ये असावे.

वेगळे करणे, चालवणे पुढील आदेश, आणि संकलित वर्ग पॅरामीटर म्हणून पास करा:

Javap -c -p Main.class

सी - वेगळे करणे,
-p - वर्गातील सर्व सदस्यांची माहिती प्रदर्शित करा.

टर्मिनलमध्ये आपल्याला खालील गोष्टी मिळाव्यात:

सार्वजनिक वर्ग org.dart.Main ( सार्वजनिक org.dart.Main(); कोड: 0: aload_0 1: invokespecial #1 // पद्धत java/lang/Object." ":()V 4: खाजगी स्थिर इंट जोडणे (int, int); कोड: 0: iload_0 1: iload_1 2: iadd 3: ireturn public static void main(java.lang.String); कोड: 0: बिपुश 43 // संख्या शाब्दिक पहिल्या व्हेरिएबलला नियुक्त केली 2: istore_1 3: bipush 56 // संख्या अक्षरशः दुसऱ्या व्हेरिएबलला नियुक्त केली 5: istore_2 6: iload_1 7: iload_2 8: invokestatic #2 // पद्धत जोडणे:(II)I 11: istore_3 12: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream; 15: iload_3 16: invokevirtual #4 // पद्धत java/io/PrintStream.println:(I)V 19: रिटर्न

येथे आपण बऱ्याच मनोरंजक गोष्टी पाहू शकता, अगदी कोड देखील जे आम्ही स्वतः लिहिलेले नाही. उदाहरणार्थ पद्धत:

सार्वजनिक org.dart.Main(); कोड: 0: aload_0 1: invokespecial #1 // पद्धत java/lang/Object." ":()V 4: परत

ही एक सामान्य पद्धत नाही, ती एक रचनाकार आहे. संकलनादरम्यान ते आपोआप जोडले गेले. ते का जोडले जाते ही एक वेगळी कथा आहे.

कृपया लक्षात घ्या की असे दिसते की पद्धतींमधील कोडच्या ओळी क्रमशः क्रमांकित केल्या आहेत. हे पूर्णपणे खरे नाही. हे पॅरामीटर्सची लांबी विचारात घेते ज्यावर काही ऑपरेशन्स अवलंबून असतात.

ऑपरेशन्सचा अर्थ स्पष्ट करण्यासाठी टिप्पण्या वापरून दोन संख्या जोडणारी पद्धत विचारात घेऊया:

खाजगी स्थिर इंट जोडणे(int, int); कोड: 0: iload_0 // पॅरामीटरमधून स्टॅकवर पहिला पूर्णांक लोड करा 1: iload_1 // पॅरामीटरमधून दुसरा पूर्णांक स्टॅकवर लोड करा 2: iadd // स्टॅकमधून दोन संख्या जोडा आणि परिणाम स्टॅकवर पुश करा 3: ireturn // पद्धतीमधून पूर्णांक संख्या परत करा

IN या प्रकरणातसर्व ऑपरेशन्स अगदी एक बाइट व्यापतात.
ऑपरेशन्सची यादी या लिंकवर आढळू शकते:
Java bytecode सूचना सूची

javac द्वारे संकलित केलेल्या कोणत्याही प्रोग्राममध्ये अशा ऑपरेशन्स आणि त्यांच्या पॅरामीटर्सचा संच असतो. याउलट, JVM, जेव्हा प्रोग्राम सुरू होतो, तेव्हा JIT तंत्रज्ञानाचा वापर करून काही प्रोग्राम ब्लॉक्सला मशीन कोडमध्ये बदलून, कमांड्सचा अर्थ लावण्यास सुरुवात करते.

एक प्रयोग म्हणून, तुम्हाला कोणता कोड मिळतो ते तुम्ही पाहू शकता विविध ऑपरेशन्ससह वेगळे प्रकारडेटा एक बाइट पेक्षा जास्त म्हणजेच 255 पेक्षा जास्त संख्यांसाठी डेटासाठी किती बाइट्स दिले जातील हे देखील तुम्ही तपासू शकता.



आम्ही वाचण्याची शिफारस करतो

वर