जावा प्लेटफार्म स्वतंत्र कैसे है जब इसे चलाने के लिए एक जेवीएम की आवश्यकता होती है?


79

मैंने अभी जावा सीखना शुरू किया है और मैं प्लेटफ़ॉर्म इंडिपेंडेंस के विषय को लेकर उलझन में हूँ।

क्या "स्वतंत्र" का अर्थ यह नहीं है कि जावा कोड किसी भी मशीन पर चलना चाहिए और कोई विशेष सॉफ्टवेयर स्थापित करने की आवश्यकता नहीं है? फिर भी जेवीएम को मशीन में मौजूद होना चाहिए।

उदाहरण के लिए, हमें C / C ++ स्रोत कोड को संकलित करने के लिए टर्बो सी कंपाइलर की आवश्यकता है और फिर इसे निष्पादित करें। मशीन में C कंपाइलर होना जरूरी है।

क्या कोई ऐसा हो सकता है जब जावा को "प्लेटफ़ॉर्म स्वतंत्र" के रूप में वर्णित किया गया हो?


4
@aaa: अंतिम बार मैंने जाँच की, यह बोरलैंड की वेबसाइट पर मुफ्त डाउनलोड के लिए उपलब्ध था।
dan04

1
हाँ, एंटीक सॉफ्टवेयर के रूप में सूचीबद्ध ... ( edn.embarcadero.com/article/20841 )।
मैथ्यू फ्लैशेन

2
संकलित कार्यक्रम को निष्पादित करने के लिए टर्बो सी (या किसी अन्य 'देशी' संकलक) की आवश्यकता नहीं है। संकलक एक .exeफ़ाइल उत्पन्न करता है। अधिकांश में इसके लिए रनटाइम लाइब्रेरी (एक .dllफ़ाइल में) की आवश्यकता होती है , पूरे कंपाइलर की नहीं
जेवियर

जवाबों:


111

आमतौर पर, संकलित कोड सीपीयू को प्रोग्राम को "निष्पादित" करने के लिए आवश्यक निर्देशों का सटीक सेट है। जावा में, संकलित कोड एक "वर्चुअल सीपीयू" के लिए निर्देशों का एक सटीक सेट है जिसे प्रत्येक भौतिक मशीन पर समान काम करने की आवश्यकता होती है।

तो, एक अर्थ में, जावा भाषा के डिजाइनरों ने फैसला किया कि भाषा और संकलित कोड स्वतंत्र रूप से प्लेटफ़ॉर्म होने जा रहा है, लेकिन चूंकि कोड को अंततः एक भौतिक मंच पर चलना है, इसलिए उन्होंने सभी प्लेटफ़ॉर्म आश्रित कोड डालने का विकल्प चुना जेवीएम।

जेवीएम के लिए यह आवश्यकता आपके टर्बो सी उदाहरण के विपरीत है। टर्बो सी के साथ, कंपाइलर प्लेटफ़ॉर्म डिपेंडेंट कोड का उत्पादन करेगा, और जेवीएम वर्क-अलाइक की कोई आवश्यकता नहीं है क्योंकि संकलित टर्बो सी प्रोग्राम को सीपीयू द्वारा सीधे निष्पादित किया जा सकता है।

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

एकमात्र तरीका यह है कि यह सभी जावा बाइटकोड सभी जावा वर्चुअल मशीनों पर काम करता है, यह है कि जावा वर्चुअल मशीन कैसे काम करती है, इसके लिए एक सख्त मानक लिखा गया है। इसका मतलब यह है कि कोई फर्क नहीं पड़ता कि आप किस भौतिक प्लेटफॉर्म का उपयोग कर रहे हैं, वह हिस्सा जहां जावा बायटेकोड जेवीएम के साथ इंटरफेस करता है, केवल एक ही तरीके से काम करने की गारंटी है। चूँकि सभी JVM ठीक उसी तरह काम करते हैं, समान कोड बिना रीकॉम्पलिंग के हर जगह समान रूप से काम करता है। यदि आप यह सुनिश्चित करने के लिए परीक्षण पास नहीं कर सकते कि यह वही है, तो आपको अपने वर्चुअल मशीन को "जावा वर्चुअल मशीन" कहने की अनुमति नहीं है।

बेशक, ऐसे तरीके हैं जो आप जावा प्रोग्राम की पोर्टेबिलिटी को तोड़ सकते हैं। आप एक प्रोग्राम लिख सकते हैं जो केवल एक ऑपरेटिंग सिस्टम (उदाहरण के लिए cmd.exe) पर मिली फ़ाइलों के लिए दिखता है। आप जेएनआई का उपयोग कर सकते हैं, जो प्रभावी रूप से आपको संकलित सी या सी ++ कोड को एक कक्षा में रखने की अनुमति देता है। आप उन सम्मेलनों का उपयोग कर सकते हैं जो केवल एक निश्चित ऑपरेटिंग सिस्टम के लिए काम करते हैं (जैसे मान लेना ":" निर्देशिकाओं को अलग करता है)। लेकिन आपको इस बात की गारंटी दी जाती है कि जब तक आप वास्तव में कुछ खास नहीं कर रहे हों (जेएनआई की तरह), तब तक किसी अलग मशीन के लिए अपने कार्यक्रम को फिर से तैयार न करें।


1
"चूँकि सभी JVM ठीक उसी तरह काम करते हैं, समान कोड सभी जगह समान रूप से काम करता है जैसे कि बिना recompiling के"। इस वाक्य का क्या मतलब है? जब भी आप अलग-अलग सिस्टम पर एक ही प्रोग्राम चलाते हैं, जिसमें JVM इंस्टॉल होता है तो हम हमेशा यह "javac filename.java" करते हैं। (उदाहरण के लिए कोई भी सरल प्रोग्राम लें) यदि प्रोग्राम को फिर से शुरू करने की आवश्यकता नहीं है, तो यह क्यों कहा जाता है कि "हम एक ही कोड को बिना रीकॉम्प्लिन के चला सकते हैं?"। कृपया समझाएँ।
करण ठक्कर

3
आपको जावा स्रोत कोड संकलित करने की आवश्यकता है, इसलिए "javac filename.java" हालांकि, आपको केवल एक बार की आवश्यकता है, और प्रत्येक मशीन पर नहीं जहां इसका उपयोग किया जाता है (यह C और C ++ से भिन्न होता है)। यदि आप सीपीयू, 32/64 बिट सिस्टम, बाइट ऑर्डर आदि बदलते हैं, तो कोड अभी भी चलता है। इसका कारण यह है कि आउटपुट "फ़ाइलनाम.क्लास" में बाइट कोड होता है, जो जेवीएम के निर्देश हैं। चूँकि सभी JVM कार्यात्मक रूप से समान होते हैं, एक बार कोड संकलित करने के बाद, आप स्रोत कोड के बिना किसी भी जावा वर्चुअल मशीन पर उस बायोटेक को चला सकते हैं। कोशिश करो, यह काम करता है। इसके अलावा, कुछ टिप्पणियां आप भ्रमित करने के लिए पुन: जमा कर रही हैं।
एडविन बक

@KaranThakkar - मुझे लगता है कि एडविन के कहने का एक मतलब यह भी हो सकता है कि आसानी से उन्हें संकलित किए बिना किसी भी प्लेटफ़ॉर्म पर आपकी परियोजनाओं में समान .jar फ़ाइलों का उपयोग करने में सक्षम होना चाहिए।
vanguard69

54
            Technical Article on How java is platform indepedent?

विस्तार में जाने से पहले, आपको यह समझना होगा कि प्लेटफ़ॉर्म का मतलब क्या है? प्लेटफार्म में कंप्यूटर हार्डवेयर (मुख्य रूप से माइक्रोप्रोसेसर की वास्तुकला) और OS होते हैं। प्लेटफार्म = हार्डवेयर + ऑपरेटिंग सिस्टम

जो भी प्लेटफ़ॉर्म इंडिपेडेंट है वह किसी भी ऑपरेटिंग सिस्टम और हार्डवेयर पर चल सकता है।

जावा प्लेटफ़ॉर्म इंडेपेडेंट है इसलिए जावा किसी भी ऑपरेटिंग सिस्टम और हार्डवेयर पर चल सकता है। अब सवाल यह है कि यह स्वतंत्र मंच कैसे है?

यह बाइट कोड के जादू के कारण है जो ओएस इंडिपेडेंट है। जब जावा कंपाइलर किसी भी कोड को संकलित करता है तो यह बाइट कोड को बनाता है न कि मशीन का देशी कोड (सी कंपाइलर के विपरीत)। अब इस बाइट कोड को मशीन पर निष्पादित करने के लिए दुभाषिया की आवश्यकता होती है। यह दुभाषिया जेवीएम है। तो JVM पढ़ता है कि बाइट कोड (जो मशीन इंडिपेडेंट है) amd इसे निष्पादित करता है। अलग-अलग JVM को अलग-अलग OS के लिए डिज़ाइन किया गया है और बाइट कोड अलग-अलग OS पर चलने में सक्षम है।

C या C ++ के मामले में (भाषा जो कि प्लेटफ़ॉर्म इंडिपेडेंट नहीं है) कंपाइलर .exe फ़ाइल उत्पन्न करता है, जो कि OS depedent है, इसलिए जब हम इसे चलाते हैं। अन्य OS पर यह फ़ाइल नहीं चलेगी क्योंकि यह फ़ाइल OS depedent है इसलिए संगत नहीं है। एक और ओएस।

अंत में एक मध्यवर्ती ओएस इंडेपेडेंट बाइट कोड जावा प्लेटफॉर्म को स्वतंत्र बनाता है।


5
यह एक मूर्खतापूर्ण जवाब है। जो जावा प्लेटफॉर्म को स्वतंत्र बनाता है वह तथ्य यह है कि जावा वीएम पर निर्भर है। यह ध्यान नहीं देता है कि OS क्या चल रहा है जब तक कि VM OS संचालन के लिए कॉल को संतुष्ट करता है। और VM अपने आप में प्लेटफ़ॉर्म स्वतंत्र नहीं है। सी / सी ++ भाषा के साथ आपके द्वारा प्रदान की गई तुलना फर्जी थी, बस उसी कोड पर स्रोत कोड संकलित करें और यह चलेगा, क्यों निर्देश के उस सेट को अलग-अलग प्लेटफ़ॉर्म पर ले जा रहा है और मूर्खतापूर्ण रूप से उम्मीद करता है कि यह चलेगा? क्या आप अपने जावा स्रोत कोड को एआरएम में ले जा सकते हैं और यह उम्मीद कर सकते हैं कि यह मेरे कस्टम_प्रोसेसर के लिए संकलित वीएम पर चल सकता है?
अभिनव गौण्याल २un

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

26

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


10
"... जावा बायनेरिज़ (बाइटकोड) को अक्सर पुन: जमा किए बिना पूरी तरह से अलग आर्किटेक्चर में ले जाया जा सकता है।" दरअसल, वे हमेशा कर सकते हैं। जब एक नए JVM के लिए पुराने से संकलित कोड संकलित किया जाता है, तो रीकॉम्पिलेशन आवश्यक होता है।
स्टीफन सी

@ स्टीफन, मैंने इसे "सिस्टम" में बदल दिया। ऐसे कई कारक हैं जो पोर्टेबिलिटी को बाधित कर सकते हैं, जिसमें जेएनए या जेएनआई का उपयोग उन पुस्तकालयों से जोड़ना है जो केवल एक ही वास्तुकला के लिए लिखे गए हैं।
मैथ्यू फ्लैशेन

1
JNA या JNI मुझे एकमात्र कारक लगता है, और वे वास्तविक दुनिया के उपयोग में बहुत दुर्लभ हैं। फिर भी, बायोटेक को अभी भी हमेशा recompiling के बिना स्थानांतरित किया जा सकता है - यह सिर्फ आपको पुस्तकालयों को फिर से संकलित करना हो सकता है जेएनआई के वहां होने की उम्मीद है। बाइट कोड हालांकि अभी भी पोर्टेबल है।
केंडल हेल्मेस्सटर गेलर

सहमत ... लेकिन उन मामलों में से कोई भी "जावा बायनेरिज़ (बायटेकोड)" को पुनः स्थापित नहीं करेगा, थोड़ा सा अंतर करें !!
स्टीफन सी

मेरे पास एक सवाल है, क्या संकलित जावा बाइटकोड, ओएस कर्नेल के साथ बातचीत करता है? यदि ऐसा है, तो कर्नेल फ़ंक्शंस अलग-अलग होने पर एक ही बाईटेकोड को विभिन्न कर्नेल पर लागू नहीं किया जा सकता है? या JVM में हर अलग कर्नेल के लिए सभी कर्नेल फ़ंक्शन शामिल हैं, जो बहुत अविश्वसनीय है ...
henryyao

9

नहीं, यह दूसरा तरीका है। यह इसलिए है क्योंकि आप वर्चुअल मशीन का उपयोग करते हैं जो जावा प्रोग्राम को स्वतंत्र करता है।

वर्चुअल मशीन स्वतंत्र नहीं है, आपको एक स्थापित करना होगा जो विशेष रूप से आपके प्रकार के सिस्टम के लिए बना हो। वर्चुअल मशीन ऑपरेटिंग सिस्टम के शीर्ष पर एक स्वतंत्र मंच बनाती है।


8

जेवीएम एक "सिम्युलेटेड मशीन" है जिसे विभिन्न प्रणालियों पर स्थापित किया जा सकता है। इस तरह, एक ही जावा कोड विभिन्न प्रणालियों पर चल सकता है, क्योंकि यह जेवीएम पर निर्भर करता है, न कि परिचालन प्रणाली पर।

यह कहना है, यह प्रोग्रामर को वर्चुअल मशीन (जेवीएम) के साथ संवाद करने और विशिष्ट मशीन और ओएस कार्यों के बजाय अपने कार्यों का उपयोग करने की अनुमति देता है। चूंकि जावा केवल JVM पर निर्भर करता है, इसलिए यह प्लेटफ़ॉर्म स्वतंत्र है (यदि प्लेटफ़ॉर्म में JVM स्थापित है)।

तो संक्षेप में, जावा प्लेटफ़ॉर्म स्वतंत्र नहीं है, इसलिए, इसे चलाने के लिए सभी प्रणालियों के लिए एक जेवीएम-इंस्टॉलेशन की आवश्यकता होती है। हालांकि, यह उन सभी प्रणालियों पर चलेगा जिनमें JVM स्थापित है।


4

जावा प्लेटफ़ॉर्म-स्वतंत्र है क्योंकि इसमें JVM (जावा वर्चुअल मशीन) है। आइए हम इसे एक वास्तविक जीवन उदाहरण के साथ स्पष्ट करते हैं। मान लेते हैं कि आप अपने परिवार के सदस्यों के लिए स्वतंत्र हैं। पर क्यों?

क्योंकि आप उन्हें अच्छी तरह से जानते हैं और वे भी आपको जानते हैं। लेकिन, आप मेरे परिवार के सदस्यों के लिए स्वतंत्र नहीं हैं। क्योंकि आप उन्हें नहीं जानते हैं और वे आपको नहीं जानते हैं। लेकिन, अगर मैं आपका दोस्त हूं और जब मैं आपको अपने परिवार के सदस्यों से मिलवा सकता हूं, तो आप उनसे खुलकर बात कर पाएंगे।

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

प्लेटफ़ॉर्म-आश्रित भाषाओं के लिए, JVM जैसा कोई मित्र उनके लिए उपलब्ध नहीं है, जो किसी भी प्लेटफ़ॉर्म परिवार के लिए अपना परिचय दे सके। इसी तरह जावा प्लेटफ़ॉर्म-स्वतंत्र है। :)


3

JVM ठोस मंच से अमूर्त है। आपका कार्यक्रम केवल जेवीएम पर निर्भर करता है और चूंकि जेवीएम विंडोज और लिनक्स जैसे विभिन्न प्लेटफार्मों के लिए उपलब्ध है, इसलिए आपका कार्यक्रम प्लेटफ़ॉर्म स्वतंत्र है (लेकिन जेवीएम निर्भर है)।


3

C / c ++ में संकलक का उपयोग करके संकलन के बाद स्रोत कोड (सी प्रोग्राम फ़ाइल) को सीधे देशी मशीन कोड (जो विशेष मशीन पर यू कोड संकलन के लिए समझा जा सकता है) में बदल दिया जाता है। और इसलिए c / c ++ का संकलित कोड अलग-अलग OS पर नहीं चल सकता है।

लेकिन जावा के मामले में: जावा (.java) की स्रोत फ़ाइल JAVAC कंपाइलर (JDK में मौजूद) का उपयोग करके संकलित की जाएगी जो बाइट कोड (.class फ़ाइल) प्रदान करती है जो किसी भी OS (भौतिक प्रणाली) में स्थापित JVM के लिए समझ में आता है। ।

यहां हमें अलग-अलग ऑपरेटिंग सिस्टम के लिए अलग-अलग JVM (जो प्लेटफॉर्म पर निर्भर है) होना चाहिए, जहां हम कोड चलाना चाहते हैं, लेकिन .class फ़ाइल (संकलित कोड / इंटरमीडिएट कोड) एक ही रहता है, क्योंकि यह स्थापित JVM में से किसी के लिए भी समझा जा सकता है। किसी भी OS पर

C / c ++ में: केवल स्रोत कोड स्वतंत्र है। जावा में: स्रोत कोड और संकलित कोड दोनों स्वतंत्र हैं।

यह जावा प्लेटफार्म (मशीन) को स्वतंत्र बनाता है।


3

जावा प्लेटफ़ॉर्म इंडिपेंडेंट नहीं है, खुद एक प्लेटफ़ॉर्म है, उस प्लेटफ़ॉर्म के आधार पर जावा ऐप चलता है, लेकिन जावा प्लेटफ़ॉर्म ही प्लेटफ़ॉर्म डिपेंडेंट है


2

1:jvm(यानी जावा वर्चुअल मशीन) प्रोग्राम का एक संग्रह है जिसमें बहुत सारी फाइलें होती हैं जो एक फोल्डर पर मौजूद विभिन्न प्रकार्य प्रदान करती हैं (जैसे कि मध्य स्तर के प्रारूप पर कार्यक्रमों का संग्रह) packagesjvmओवरलोड नहीं होने में o/sमदद करता है जहां इसकी केवल .classफाइलों या जावा अनुप्रयोगों को केवल स्वयं द्वारा निष्पादित करने में मदद करता है। यह जावा कंपाइलर द्वारा अनुपालन के बाद इसकी समानता को मध्यम स्तर का प्रारूप बनाने में मदद करता है, फिर यह बाइट कोड (। .cl file) प्रदान करता है। के लिए विशिष्ट नहीं है o/sऔर processor
2: jvm 3 को बाइट कोड बनाता है : jvm रैम से मेमोरी एलोकेशन भी जारी करता है, जो नियंत्रण के बाद संपन्न निष्पादन बनाता है।.exe जेवीएम समझने योग्य बनाने के लिए और फ्रैम बाइट कोड को पुनः प्राप्त करने के बाद प्रत्येक कार्यों के लिए मेमोरी आवंटन को बढ़ाता है।


2

जेवीएम ओएस पर निर्भर है। हर ओएस के लिए अलग JVM।

".class" सभी JVM के लिए समान है। इसलिए, हर JVM यह समझता है कि ".class" फ़ाइल डेटा।

विंडोज़ पर निर्भर जेवीएम खिड़कियों को निर्भर निर्देश देते हैं, विंडोज़ को निर्भर करते हैं।

यह अन्य ऑपरेटिंग सिस्टम के लिए पसंद है। इसलिए, जावा किसी भी ऑपरेटिंग सिस्टम पर चलता है।

यही कारण है कि जावा ओएस स्वतंत्र है।


2

आसान शब्दों में:

जावा प्रोग्रामिंग भाषा प्लेटफ़ॉर्म स्वतंत्र है।

जेवीएम प्लेटफॉर्म पर निर्भर है


1

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

एक संबंधित विचार कई ऑपरेटिंग सिस्टम में मौजूद हार्डवेयर अमूर्त परत है जो समान ओएस को असमान हार्डवेयर पर चलाने की अनुमति देता है।

आप मूल सवाल में, टर्बो सी javac कार्यक्रम के लिए विनम्र है, और JVM OS / HAL है।


1

क्या स्वतंत्र का मतलब यह नहीं है कि जावा कोड को किसी भी मशीन पर चलाया जा सकता है और इसे स्थापित करने के लिए किसी विशेष सॉफ्टवेयर की आवश्यकता नहीं होगी (इस मामले में जेवीएम को मशीन में उपस्थित होना होगा)?

जावा के साथ, आप विंडोज पर स्रोत कोड संकलित कर सकते हैं और संकलित कोड (सटीक होने के लिए बाइटकोड) को जेवीएम चलाने वाले किसी भी मंच पर निष्पादित (व्याख्या) किया जा सकता है। तो हाँ आपको एक JVM की आवश्यकता है लेकिन JVM किसी भी संकलित कोड को चला सकता है, संकलित कोड प्लेटफ़ॉर्म स्वतंत्र है

दूसरे शब्दों में, आपके पास स्रोत कोड की पोर्टेबिलिटी और संकलित कोड की पोर्टेबिलिटी दोनों हैं।

उदाहरण के लिए, C / C ++ सोर्स कोड को संकलित करने के लिए हमें टर्बो सी कंपाइलर की आवश्यकता है और फिर इसे निष्पादित करें। मशीन में C कंपाइलर होना आवश्यक है।

मशीन में C कंपाइलर होना आवश्यक नहीं है, मशीन को एक प्लेटफ़ॉर्म विशिष्ट बाइनरी का उपयोग करना पड़ता है। C या C ++ के साथ, संकलित कोड प्रत्येक वास्तुकला के लिए विशिष्ट है, यह प्लेटफ़ॉर्म स्वतंत्र है

दूसरे शब्दों में, C / C ++ के साथ आपके पास स्रोत कोड की पोर्टेबिलिटी है (कुछ अनुशासन के साथ) लेकिन संकलित कोड की पोर्टेबिलिटी नहीं: आपको प्रत्येक आर्किटेक्चर के लिए प्लेटफ़ॉर्म विशिष्ट बायनेरिज़ में फिर से जोड़ने की आवश्यकता है।


1

जेवीएम प्लेटफॉर्म पर निर्भर होगा।
लेकिन यह जो भी उत्पन्न करेगा वह स्वतंत्र होगा। [जिसे हमने बायटेकोड कहा है या बस आप कह सकते हैं ... क्लास फाइल]। इसके लिए जावा को प्लेटफ़ॉर्म स्वतंत्र क्यों कहा जाता है।
आप Mac पर Windows के समान क्लास फ़ाइल चला सकते हैं लेकिन इसके लिए JRE की आवश्यकता होगी।


0

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


0

जेवीएम और जेआईटी संकलन के बारे में चर्चा के लिए बस एक साइड नोट। यह सी # और सीएलआर के साथ और पायथन में कुछ हद तक एक ही सिद्धांत है, और जब कोई कहता है कि कोड "सीधे हार्डवेयर" पर चलता है जो वास्तव में उस निर्देश में सच है जो पहले से संकलित है, तो अनुकूलन का लाभ उठाने में सक्षम होगा मशीन / सीपीयू पर इसे चलाया जा रहा है। इसलिए, भले ही किसी मॉड्यूल का प्रारंभिक संकलन धीमा हो, लेकिन अगली बार जब यह मॉड्यूल चलाया जाता है, तो कोड को निष्पादित किया जा रहा है, जो देशी गति से चलता है और इस प्रकार कहने के लिए सीधे हार्डवेयर पर चलता है।


0

जावा डेवलपर डेवलपर के पहलू में स्वतंत्र है, लेकिन एंड-यूज़र के लिए यह मामला नहीं है, जिन्हें जावा कोड चलाने के लिए प्लेटफ़ॉर्म निर्भर जेवीएम की आवश्यकता है। मूल रूप से, जब जावा कोड संकलित किया जाता है, तो एक बाइटकोड उत्पन्न होता है जो आमतौर पर प्लेटफ़ॉर्म स्वतंत्र होता है। इस प्रकार, डेवलपर को पूरी प्लेटफ़ॉर्म श्रृंखला के लिए एक ही कोड लिखना होगा। लेकिन, यह लाभ एंड-यूज़र के लिए सिरदर्द है जो इस संकलित कोड को चलाने के लिए जेवीएम को स्थापित करने की आवश्यकता है। यह JVM हर प्लेटफॉर्म के लिए अलग है। इस प्रकार, निर्भरता केवल अंत-उपयोगकर्ता के लिए लागू होती है।


0

Javac - संकलक जो स्रोत कोड को बाइट कोड में परिवर्तित करता है। जेवीएम - दुभाषिया जो बाइट कोड को मशीन भाषा कोड में परिवर्तित करता है।

जैसा कि हम जानते हैं कि java दोनों का संकलन है ** r & ** दुभाषिया आधारित भाषा। एक बार जावा कोड को सोर्स कोड के रूप में भी जाना जाता है, इसे BYTE CODE के रूप में जाना जाता है, जिसे पोर्टेबल और सभी ऑपरेटिंग सिस्टम पर आसानी से निष्पादित किया जा सकता है। बाइट कोड उत्पन्न मूल रूप से हेक्सा दशमलव प्रारूप में दर्शाया गया है । यह प्रारूप हर प्लेटफ़ॉर्म पर समान है यह सोलारिस वर्क स्टेशन या मैकिंटोश, विंडोज़ या लिनक्स है। संकलन के बाद, दुभाषिया उत्पन्न बाइट कोड पढ़ता है और मेजबान मशीन के अनुसार इसका अनुवाद करता है। । बाइट कोड की व्याख्या जावा वर्चुअल मशीन द्वारा की जाती है जो हमारे द्वारा स्थापित सभी ऑपरेटिंग सिस्टम के साथ उपलब्ध है। इसलिए जावा प्रोग्राम को एक नए प्लेटफ़ॉर्म पर पोर्ट करने के लिए आवश्यक है जो दुभाषिया और कुछ लाइब्रेरी रूटीन को पोर्ट करना है।

आशा है कि इससे सहायता मिलेगी!!!


0

जब हम C स्रोत डेटा संकलित करते हैं, तो यह मूल कोड उत्पन्न करता है जिसे वर्तमान ऑपरेटिंग सिस्टम द्वारा समझा जा सकता है। जब हम इस सोर्स कोड को अन्य ऑपरेटिंग सिस्टम में ले जाते हैं, तो इसे ऑपरेटिंग सिस्टम द्वारा नहीं समझा जा सकता क्योंकि देशी कोड का मतलब है कि प्रतिनिधित्व ओएस से ओएस में परिवर्तन है इसलिए C या C ++ प्लेटफॉर्म पर निर्भर हैं।

अब जावा के मामले में, संकलन के बाद हमें देशी कोड के बजाय बाइट कोड मिलता है। जब हम बाइट कोड चलाएंगे, तो इसे जेवीएम की मदद से देशी कोड में बदल दिया जाएगा और फिर इसे निष्पादित किया जाएगा।

तो जावा प्लेटफ़ॉर्म स्वतंत्र है और C या C ++ प्लेटफ़ॉर्म स्वतंत्र नहीं है।


0

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


0

{App1 (जावा कोड) ------> App1byteCode} ........ {(JVM + MacOS) App1, App2, App3} के साथ काम करने में मदद करता है

{App2 (जावा कोड) -----> App2byteCode} ........ {(JVM + LinuxOS) App1, App2, App3} के साथ काम करने में मदद करता है

{App3 (जावा कोड) -----> App3byteCode} ........ {{(JVM + WindowsOS) App1, App2, App3} के साथ काम करने में मदद

यह कैसे हो रहा है?

Ans: JVM ByteCodeमें अंतर्निहित OS के साथ पढ़ने और प्रतिक्रिया करने की क्षमता है क्योंकि JVM OS के साथ सिंक में है।

तो हम पाते हैं, हमें जेवीएम की आवश्यकता है सिंक के साथ प्लेटफार्म।

लेकिन मुख्य बात यह है कि प्रोग्रामर को प्लेटफ़ॉर्म का विशिष्ट ज्ञान नहीं है और एक विशिष्ट प्लेटफ़ॉर्म को ध्यान में रखते हुए अपने एप्लिकेशन को प्रोग्राम करना है।

जावा में लिखने के कार्यक्रम की लचीलेपन --- ByteCodeकिसी भी मशीन पर संकलित और चलाने के लिए (हां इसे निष्पादित करने के लिए प्लेटफ़ॉर्म डिपेंडेंट जेवीएम की आवश्यकता है) जावा प्लेटफ़ॉर्म को स्वतंत्र बनाता है।


-1

जब हम जावा फ़ाइल संकलित करते हैं। उस प्रोग्राम की .class फ़ाइल उत्पन्न होती है। .class फ़ाइल में बाइट कोड होता है। बाइट कोड प्लेटफ़ॉर्म स्वतंत्र होता है, बाइट कोड जावा वर्चुअल मशीन का उपयोग करके किसी भी ऑपरेटिंग सिस्टम पर चल सकता है। प्लेटफ़ॉर्म आज़ादी न केवल ऑपरेटिंग सिस्टम के बारे में बल्कि हार्डवेयर के बारे में भी। जब आप 32-बिट पर बनाए गए 16-बिट मशीन पर जावा एप्लिकेशन चलाते हैं, तो आपको लक्ष्य प्रणाली के अनुसार डेटा प्रकारों को परिवर्तित करने के बारे में चिंता करने की आवश्यकता नहीं है। आप किसी भी आर्किटेक्चर पर अपना ऐप चला सकते हैं और आपको प्रत्येक में एक ही परिणाम मिलेगा।


-3

संपादित करें: काफी नहीं। नीचे टिप्पणी देखें।

जावा सीधे किसी भी चीज़ पर नहीं चलता है। इसे एक JVM द्वारा बाइटकोड में परिवर्तित करने की आवश्यकता है।

चूँकि JVM सभी प्रमुख प्लेटफार्मों के लिए मौजूद है, इसलिए यह Java प्लेटफ़ॉर्म-स्वतंत्र THROUGH को JVM बनाता है।


1
JVM दुभाषिया या JITs बायटेकोड की व्याख्या करता है। यह इसका संकलन नहीं है।
मैथ्यू फ्लैशेन

हाँ। "जेवीएम के लिए" अधिक सटीक है।
पॉलीजेन लुब्रिकेंट्स

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