शीर्ष प्रश्न
समयरेखा
चैट
परिप्रेक्ष्य
जावा (प्रोग्रामिंग भाषा)
वस्तु-उन्मुख प्रोग्रामिंग भाषा विकिपीडिया से, मुक्त विश्वकोश
Remove ads
जावा एक प्रोग्रामिंग भाषा है जिसे मूलतः सन माइक्रोसिस्टम्स के जेम्स गोसलिंग द्वारा विकसित किया गया तथा 1995 में इसे सन माइक्रोसिस्टम्स के जावा प्लेटफ़ार्म के एक मुख्य अवयव के रूप में रिलीज़ किया गया। भाषा अपना अधिकांश वाक्य विन्यास (सिंटेक्स) C (सी) और C++ से प्राप्त करती है लेकिन इसके पास एक सरल ऑब्जेक्ट मॉडल और कुछ निम्न स्तर की सुविधायें मौजूद हैं। जावा के प्रयोगों को विशिष्ट रूप से बाईटकोड (क्लास फाइल) के लिए संकलित किया जाता है जिसे किसी भी कंप्यूटर आर्किटेक्चर वाले किसी भी जावा वर्चुअल मशीन (JVM) पर चालू किया जा सकता है।
1995 से सन द्वारा मूल तथा सन्दर्भ कार्यान्वयन जावा संकलकों (कम्पाइलरों), वर्चुअल मशीनों और क्लास लाइब्रेरियों को विकसित किया गया। मई 2007 तक, जावा कम्युनिटी प्रोसेस के विशेष उल्लेखपूर्वक अनुमति में सन ने अपने अधिकांश जावा प्रोद्योगिकियों को GNU जनरल पब्लिक लाइसेन्स के अर्न्तगत मुफ्त सॉफ्टवेयर के रूप में उपलब्ध कराया. दूसरों ने भी सन की इन प्रोद्योगिकियों के वैकल्पिक कार्यान्वयनों को विकसित किया, जैसे कि GNU क्लासपाथ और जावा के लिए GNU कम्पाइलर.
Remove ads
इतिहास
सारांश
परिप्रेक्ष्य

जून 1991 में जेम्स गोसलिंग ने अपने कई सेट-टॉप बॉक्स परियोजनाओं में से किसी एक परियोजना में उपयोग करने के लिए जावा भाषा परियोजना को प्रारम्भ किया।[7] इस भाषा का नाम पहले ओक (Oak) था जिसका नामकरण गोसलिंग के कार्यालय के बाहर स्थित एक ओक पेड़ के नाम पर हुआ था। इसके बाद इसका नाम ग्रीन (Green) भी पड़ा और अंत में इसका नाम जावा पड़ा. यह जावा नाम क्रमबद्ध शब्दों की एक सूची में से लिया गया।[8] गोसलिंग का लक्ष्य था कि वे एक वर्चुअल मशीन व एक भाषा की शुरुआत करें जो C/C++ शैली पद्वति से परिचित हो। [9]
1995 में सन ने जावा 1.0 के रूप में पहला सार्वजनिक कार्यान्वयन रिलीज़ किया। प्रचलित प्लेटफार्मों पर बिना-मूल्य रन-टाइम (चालू होने में लगने वाला समय) की सुविधा प्रदान करते हुए इसने "राइट वंस, रन एनीव्हेयर" (WORA) का वादा किया। पर्याप्त सुदृढ़ और समनुरूपयोग्य (कॉन्फिगरेबल) सुरक्षा प्रकट करते हुए इसने नेटवर्क और फाइल एक्सेस के प्रतिबंधों को अनुमति दे दी। मुख्य वेब ब्राउज़रों ने जल्द ही वेबपेजों के भीतर जावा एप्लेटों को चलाने की योग्यता को सम्मिलित कर लिया और जल्द ही जावा विख्यात हो गया। जावा 2 (जिसे दिसम्बर 1998 में शुरू-शुरू में J2SE 1.2 के रूप में रिलीज़ किया गया) के आगमन के साथ नये भाषांतरों (वर्सन) में बहु आकृति (कॉन्फिगरेशन) थी जो विभिन्न प्रकार के प्लेटफार्मों के लिए निर्मित थी। उदाहरणस्वरुप, एंटरप्राइज़ अप्लिकेशन के लिए लक्षित J2EE और मोबाइल अप्लिकेशन के लिए अत्यंत नवीन वर्सन J2ME . J2SE ने मानक (स्टैण्डर्ड) संस्करण (एडिशन) को लक्षित किया। 2006 में, व्यापर के उद्देश्य से सन ने J2 के नये वर्सनों का नाम बदलकर क्रमश: जावा EE, जावा ME और जावा SE कर दिया।
1997 में, सन माइक्रोसिस्टमस ने जावा को अमली जामा पहनाने के लिए ISO/IEC JTC1 मानक समिति को और बाद में ऐक्मा अंतराष्ट्रीय को प्रस्ताव भेजा, पर जल्द ही यह इस प्रक्रिया से हट गई।[10] जावा समुदाय प्रक्रिया द्वारा नियंत्रित जावा वास्तव में एक डी फैक्टो मानक बना हुआ है।[11] अपने सॉफ्टवेयर मालिक होने के दर्जे के बावजूद, एक बार सन ने बिना शुल्क के जावा कार्यान्वयन का अधिकांश हिस्सा उपलब्ध कराया. सन ने जावा से विशेष उत्पाद जैसे जावा इंटरप्राइज सिस्टम को लाइसेंस बेचकर मुनाफा कमाया. सन ने अपने सॉफ्टवेयर डेवेलपमेंट किट (SDK) और रनटाइम एनवायरनमेंट (JRE) (SDK का एक उपसमुच्चय (सबसेट)) में भेद किया; प्राथमिक भेद में JRE का कम्पाइलर की कमी, उपयोगिता प्रोग्राम और हेडर फाइल्स शामिल हैं।
13 नवम्बर 2006 को, सन ने GNU जनरल पब्लिक लाइसेन्स (GPL) के शर्तों के अधीन अधिकांश जावा को स्वतंत्र और मुक्त स्रोत सॉफ्टवेयर के रूप में रिलीज़ किया। 8 मई 2007 को सन ने प्रक्रिया का समापन किया, कोड के एक छोटे से हिस्से जिस पर सन का प्रकाशनाधिकार (कॉपीराईट) नहीं है, उसे छोड़कर बाकि जावा के सभी कोर कोड को मुफ्त सॉफ्टवेयर/मुक्त-स्त्रोत वितरण शर्त के तहत उपलब्ध कराया.[12]
सिद्धांत
जावा भाषा को निर्मित करने के पांच मुख्य उद्देश्य थे:[13]
- यह "सरल, ऑब्जेक्ट उन्मुख (ओरिएंटेड) और परिचित" होनी चाहिए।
- यह "रोबस्ट और सुरक्षित" होनी चाहिए।
- यह "आर्किटेक्चर तटस्थ (न्यूट्रल) और वहनीय" होनी चाहिए।
- यह "उच्च प्रदर्शन" के साथ लागू होनी चाहिए।
- यह "भाषांतरित, थ्रेडेड (सूत्रित) और गतिक" होनी चाहिए।
इंजीलवाद
हालांकि जावा का अधिकांश प्रत्यक्ष मुनाफा लाइसेंसिंग और JCP सदस्यता राशि से आता है, कुछ मानते हैं कि जावा प्रमुखतः हार्डवेयर सर्वर को बढ़ावा देने का एक वाहन और/या आंतरिक रूप से सन के लिए सोलारिस OS की बिक्री हैं और सन के उपाध्यक्ष रिच ग्रीन ने कहा कि जावा के लिए सन की आदर्श भूमिका "इंजीलवाद" के जैसी है।[14]
Remove ads
कार्यप्रणाली (प्रैक्टिसेस)
सारांश
परिप्रेक्ष्य
जावा प्लैटफॉर्म
जावा की एक विशेषता वहनीयता है, जिसका मतलब है कि जावा भाषा में लिखे गए कंप्यूटर प्रोग्राम किसी भी हार्डवेयर समर्थित/ऑपरेटिंग सिस्टम प्लेटफॉर्म पर समान रूप से कार्य करता है। इसे जावा भाषा संकेत को संकलित करके प्राप्त किया गया है, मशीन कोड से नहीं बल्कि जावा बाईटकोड से, - निर्देश मशीन संकेत के अनुरूप है लेकिन विशेष तौर पर होस्ट हार्डवेयर के लिए लिखित वर्चुअल मशीन (VM) द्वारा भाषांतरित करना अभीष्ट होगा। एंड-यूज़र्स सामान्य तौर पर स्टैंडअलोन प्रयोग मशीन/या जावा एप्लेट्स के लिए वेब ब्राउजर में जावा रनटाइम एनवायरनमेंट (JRE) का इस्तेमाल करते हैं, जो उनके स्वयं के मशीन पर संस्थापित (इंस्टाल्ड) है।
मानकताप्राप्त लाइब्रेरीज होस्ट विशिष्ट सुविधाओं जैसे:- आरेखी (ग्राफिक्स), थ्रेडिंग और नेटवर्किंग के अभिगमन (एक्सेस) के लिए एक क्रियाशील रास्ता प्रदान करते हैं।
बाईटकोड को इस्तेमाल करने का सबसे मुख्य लाभ है वहनता. जो कुछ भी हो, भाषांतरण के ऊपरी भाग का मतलब होता है कि भाषांतरित प्रोग्राम्स हमेशा मूल निष्पादनयोग्य से संकलित प्रोग्राम्स से ज्यादा धीरे चलती हैं और बुरे प्रदर्शन के कारण जावा की साख को नुकसान होता है। हाल ही में JVM कार्यान्वयन में कई ईष्टतमीकरण (optimization) तकनीकों के आने से यह परेशानी थोड़ी कम हो गई है।
कार्यान्वयन
सन माइक्रोसिस्टम्स आधिकारिक तौर पर जावा मानक संस्करण प्लेटफॉर्म Linux, Mac OS X और Solaris के लिए लाइसेंस देती है [उद्धरण चाहिए] . हालांकि, पूर्व में सन ने Microsoft को जावा लाइसेंस दिया, लाइसेंस की अवधि समाप्त हो चुकी है और इसका फिर से नवीकरण नहीं किया गया है।[15] तीसरे-समूह के विक्रेताओं और लाइसेंसधारियों के नेटवर्क द्वारा,[16] वैकल्पिक जावा एनवायरनमेंट इसके और दूसरे प्लेटफॉर्मस के लिए उपलब्ध हैं।
जावा ब्रांड का उपयोग करने के लिए सन का ट्रेडमार्क लाइसेंस दृढ़तापूर्वक कहता है कि सभी क्रियान्वयन 'उपयुक्त' हो। इसका परिणाम Microsoft के साथ कानूनी विवाद के रूप में निकला जब सन ने दावा किया कि Microsoft क्रियान्वयन RMI और JNI को समर्थन नहीं करती और इसमें उसके स्वयं के अतिरिक्त प्लेटफॉर्म-विशिष्ट विशेषताएं हैं। सन ने 1997 में अभियोग चलाया और 2001 में 20 मिलियन डॉलर का भुगतान और साथ ही साथ सन के लाइसेंस की शर्तो को लागू करने का कोर्ट का आदेश भी पाया।[17] परिणामस्वरूप, Microsoft ने विंडोज के साथ जावा को ज्यादा दिन नहीं चलाया और विंडोज के हाल के वर्सनों में, इंटरनेट एक्स्प्लोरर बिना तीसरी पार्टी के नियंत्रण के जावा एपप्लेट्स को समर्थन नहीं कर सकता. सन और दूसरों ने विंडोज के उस और अन्य वर्सनों के लिए मुफ्त जावा रन-टाइम सिस्टम उपलब्ध कराया.
जावा EE रणनीति के लिए प्लेटफॉर्म-स्वतंत्र जावा आवश्यक है और यहां तक कि क्रिर्यान्वयन को प्रमाणित करने के लिए और सख्त वैधीकरण (वेलिडेशन) जरुरी है। अंतःस्थापित जावा एनवायरनमेंट का उपयोग करके, यह एनवायरनमेंट वहनीय सर्वर-साइड जैसे वेब सर्विसेस, सर्वलेट्स और इंटरप्राइज जावाबीन्स, साथ ही साथ OSGi पर आधारित अंतःस्थापित सिस्टम को सक्षम बनाता है। ग्लासफिश परियोजना के द्वारा सन जावा EE प्रौद्योगिकी का पूर्ण संचालित, एकीकृत मुक्त स्त्रोत कार्यान्वयन के लिए कार्य कर रहा है।
सन JRE का सुपरसेट भी वितरित करता है जिसे जावा डेवलपमेंट किट (सामान्य तौर पर JDK के रूप में जाना जाता है), कहा जाता है जिसमे विकास उपकरण जैसे जावा कम्पाइलर, जावाडोक, जार और डीबगर शामिल है।
प्रदर्शन
जावा प्रोग्राम के प्रदर्शन का इसके समतुल्य मूलतः संकलित भाषा (जैसे कि C, C++, या ऑब्जेक्ट पास्कल) में लिखे गए प्रोग्राम से तुलना करना कठिन है क्योंकि जावा के बाईटकोड कम्पाइलर का टारगेट प्लेटफॉर्म, जावा प्लेटफॉर्म ही है और बाईटकोड JVM द्वारा मशीन कोड में या तो भाषांतरित कर दिया जाता है या संकलित कर दिया जाता है। इन दो भिन्न दृष्टिकोणों: स्थैतिक बनाम गतिशील संकलन और पुनः संकलन और अन्य से उत्पन्न परिदृश्यों की तुलना करना बहुत कठिन और अलग है।
संकलित भाषाओं में लिखे प्रोग्रामों की तुलना में जावा में लिखे प्रोग्रामों का धीमा होना और अधिक मेमोरी की आवश्यकता होना एक विशेषता रही है।[18] जो कुछ भी हो, जस्ट-इन टाइम संकलन (1997/1998 में जावा 1.1),[19][20][21] के आगमन के कारण जावा प्रोग्रामों की क्रियान्वयन गति तेजी से बढ़ी है, अतिरिक्त भाषा विशेषताएं उत्तम कोड विश्लेषण, [तथ्य वांछित] और जावा वर्चुअल मशीन में स्वंय इष्टतमीकरण (जैसे कि 2000 में सन के JVM के लिए हॉटस्पॉट का आभाव होना) को समर्थन करती है।
स्वचालित स्मृति (मेमोरी) प्रबंधन
ऑब्जेक्ट जीवन चक्र में स्मृति का प्रबंधन करने के लिए जावा एक स्वचालित कचरा (गार्बेज) संग्रहकर्ता का उपयोग करता है। प्रोग्रामर निर्धारित कर लेता है कब ऑब्जेक्ट का निर्माण होगा और एक बार ऑब्जेक्ट जब और उपयोग के लायक नहीं रह जाता तो उसके स्मृति को पुनः प्राप्त करने की जिम्मेदारी जावा रनटाइम की होती है। एक बार जब ऑब्जेक्ट का कोई सन्दर्भ बाकी नहीं रहता, तब अगम्य (अनरिचेबल) ऑब्जेक्ट संग्राहक द्वारा स्वतः मुक्त होने के योग्य हो जाता है। कुछ कुछ मेमोरी रिसाव के समान तब भी जारी रह सकता है अगर एक प्रोग्रामर का कोड किसी ऑब्जेक्ट का एक सन्दर्भ जिसकी अब और जरूरत नहीं है उसे पकड़ता है, उसी तरह जब ओब्जेक्ट्स जिसकी और जरूरत नहीं है वह उस कंटेनर में संग्रहित है जो अभी भी इस्तेमाल में है। अगर अस्तित्वविहीन ऑब्जेक्ट के लिए पद्धतियों को बुलाया जाता हैं, एक "नल पॉइंटर एक्सेप्शन" फेंका जाता है।[22][23]
जावा के स्वचालित स्मृति प्रबंधन मॉडल के पीछे एक विचार यह है कि प्रोग्रामर्स नियमित स्मृति प्रबंधन को प्रर्दशित करने का बोझ थोड़ा कम कर ले. कुछ भाषाओं में ऑब्जेक्ट के निर्माण के लिए स्मृति स्टेक पर अनुमान से आवंटित की जाती है या स्पष्टतया आवंटित होती है और ढेर (हीप) से पुनः आवंटित की जाती हैं। हर तरह से स्मृति प्रबंधन की जिम्मेदारी प्रोग्रामर के साथ रहती है। अगर कार्यक्रम किसी ऑब्जेक्ट को पुनःआवंटन नहीं करता है तो एक स्मृति रिसाव उत्पन्न होने लगता है। अगर कार्यक्रम स्मृति का अभिगमन या पुनः आवंटित करने का प्रयास करता है जो पहले ही पुनःआवंटित किया जा चुका है, तब परिणाम का अनुमान लगाना और व्याख्या करना मुश्किल हो जाता है और कार्यक्रम संभवतः या तो अस्थिर और/या तो समाप्त हो जाता हैं। इसे स्मार्ट संकेतों के इस्तेमाल से अंशतः ठीक किया जा सकता है लेकिन यह ऊपरिव्यय और जटिलता को बढाता है।
कचरा संग्रहण किसी भी समय हो सकता है। आदर्शतः यह तब होगा जब कार्यक्रम खाली रहता है। अगर नए ऑब्जेक्ट को आवंटित करने के लिए स्वतंत्र स्मृति अपर्याप्त है तब इसका चलाया जाना निश्चित है, यह क्षणभर के लिए एक कार्यक्रम स्थापित करने का कारण बन सकता है। स्पष्ट स्मृति प्रबंधन जावा में संभव नहीं है।
जावा C/C++ शैली सूचक अंकगणित को समर्थन नहीं करता है, जहां पर ऑब्जेक्ट एड्रेस (पता) और अचिन्हित इंटीजर्स (आमतौर पर लम्बे इंटीजर्स) को अदला-बदली करके उपयोग किया जा सकता हैं। यह कचरा कलेक्टर को सन्दर्भित ऑब्जेक्टस को स्थानांतरित करने की अनुमति देता है और इसका बचाव और सुरक्षा सुनिश्चित करता है।
जैसा कि C++ और कुछ दूसरे ऑब्जेक्ट-उन्मुख भाषाओँ में, जावा के परिवर्तनीय प्राथमिक प्रकार ऑब्जेक्ट नहीं है। प्राथमिक प्रकारों की उपयोगिता को या तो क्षेत्रों (ऑब्जेक्ट के लिए) में प्रत्यक्ष रूप से संचित किया जाता है या ढेरों पर (पद्धति के लिए) ना कि स्टेक पर, जैसा ऑब्जेक्ट के लिए सामान्य तौर पर सही है (लेकिन बचाव विश्लेषण देखें)। जावा के डिजाईनरों द्वारा प्रदर्शन के कारण लिया गया यह एक सजग निर्णय था। इसके कारण, जावा को एक शुद्ध ऑब्जेक्ट-उन्मुख प्रोग्रामिंग भाषा नहीं माना गया। जो कुछ भी हो, जैसा कि जावा 5.0, स्वतः संचालन प्रोग्रामर्स को आगे बढ़ने के लिए सक्षम बनाता है अगर प्राथमिक प्रकारें उनके आवरण श्रेणियों के उदाहरण होते हैं।
Remove ads
वाक्यविन्यास
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads