सदस्य:Aldrin Jose .A/प्रयोगपृष्ठ

मुक्त ज्ञानकोश विकिपीडिया से


जावा (प्रोग्रामिंग भाषा)[संपादित करें]

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

1995 से सन द्वारा मूल तथा सन्दर्भ कार्यान्वयन जावा संकलकों (कम्पाइलरों), वर्चुअल मशीनों और क्लास लाइब्रेरियों को विकसित किया गया। मई 2007 तक, जावा कम्युनिटी प्रोसेस के विशेष उल्लेखपूर्वक अनुमति में सन ने अपने अधिकांश जावा प्रोद्योगिकियों को GNU जनरल पब्लिक लाइसेन्स के अर्न्तगत मुफ्त सॉफ्टवेयर के रूप में उपलब्ध कराया. दूसरों ने भी सन की इन प्रोद्योगिकियों के वैकल्पिक कार्यान्वयनों को विकसित किया, जैसे कि GNU क्लासपाथ और जावा के लिए GNU कम्पाइलर.

इतिहास[संपादित करें]

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

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

जावा प्रोग्रामिंग भाषा में लिखना कोड का उत्पादन करने का प्राथमिक तरीका है जिसे जावा वर्चुअल मशीन (जे वी एम) में बाइट कोड के रूप में तैनात किया जाएगा; बाइट कोड कंपाइलर अन्य भाषाओं के लिए भी उपलब्ध हैं, जिनमें Ada, JavaScript, Python और Ruby शामिल हैं। इसके अलावा, कई भाषाओं को जेवीएम पर मूल रूप से चलाने के लिए डिज़ाइन किया गया है, जिसमें क्लोजर, ग्रूवी और स्काला शामिल हैं। जावा सिंटैक्स सी और सी ++ से बहुत अधिक उधार लेता है, लेकिन ऑब्जेक्ट ओरिएंटेड फीचर्स स्मॉलटाक और ऑब्जेक्टिव-सी के बाद तैयार किए जाते हैं। जावा कुछ निम्न-स्तर के निर्माण को इंगित करता है जैसे कि पॉइंटर्स और एक बहुत ही सरल मेमोरी मॉडल है जहां ऑब्जेक्ट्स को ढेर पर आवंटित किया जाता है (जबकि कुछ कार्यान्वयन जैसे कि सभी वर्तमान में ओरेकल द्वारा समर्थित हैं, स्टैक पर आवंटित करने के लिए एस्केप विश्लेषण अनुकूलन का उपयोग कर सकते हैं) और सभी चर वस्तु प्रकार के संदर्भ हैं। मेमोरी प्रबंधन जे वी एम द्वारा किए गए एकीकृत स्वचालित कचरा संग्रह के माध्यम से नियंत्रित किया जाता है।

13 नवंबर, 2006 को, सन माइक्रोसिस्टम्स ने जावा के अपने कार्यान्वयन के थोक को GNU जनरल पब्लिक लाइसेंस (GPL) के तहत उपलब्ध कराया। नवीनतम संस्करण जावा 13, अक्टूबर 2019 में रिलीज़ किए गए हैं, और जावा 11, वर्तमान में समर्थित दीर्घकालिक समर्थन (एलटीएस) संस्करण ("ओरेकल ग्राहक ओरेकल प्रीमियर सपोर्ट प्राप्त करेगा"), 25 सितंबर 2018 को जारी किया गया; ओरेकल ने जनवरी 2019 में "विरासत" जावा 8 एलटीएस को अंतिम मुफ्त "सार्वजनिक अपडेट" के लिए जारी किया, जबकि यह अन्यथा अभी भी कम से कम दिसंबर 2020 तक व्यक्तिगत उपयोग के लिए सार्वजनिक अपडेट के साथ जावा 8 का समर्थन करेगा। ओरेकल (और अन्य) "अत्यधिक अनुशंसा करते हैं कि आप जावा के पुराने संस्करणों की स्थापना रद्द करें", क्योंकि अनसुलझे सुरक्षा मुद्दों के कारण गंभीर जोखिम हैं। चूंकि जावा 9 (और 10) अब समर्थित नहीं है, ओरेकल अपने उपयोगकर्ताओं को जावा 11 को "तुरंत संक्रमण" करने की सलाह देता है (जावा 12 भी एक गैर-एलटीएस विकल्प है)। ओरेकल ने जनवरी 8, 2019 में वाणिज्यिक उपयोग के लिए मुक्त होने वाली विरासत जावा 8 एलटीएस के लिए अंतिम सार्वजनिक अद्यतन जारी किया। जावा 8 को कम से कम दिसंबर 2020 तक व्यक्तिगत उपयोग के लिए सार्वजनिक अपडेट के साथ समर्थन किया जाएगा। जावा 6 के लिए ओरेकल विस्तारित समर्थन समाप्त हो गया। दिसंबर 2018।

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

क्रियान्वयन[संपादित करें]

ओरेकल कॉरपोरेशन 27 जनवरी 2010 को सन माइक्रोसिस्टम्स के अधिग्रहण के बाद जावा एसई प्लेटफॉर्म के आधिकारिक कार्यान्वयन का वर्तमान मालिक है। यह कार्यान्वयन जावा द्वारा सन के मूल कार्यान्वयन पर आधारित है। Oracle कार्यान्वयन Microsoft Windows के लिए उपलब्ध है (अभी भी XP के लिए काम करता है, जबकि केवल बाद के संस्करण वर्तमान में आधिकारिक रूप से समर्थित हैं), macOS, लिनक्स और सोलारिस। क्योंकि जावा में एक्मा इंटरनेशनल, आईएसओ / आईईसी, एएनएसआई, या अन्य तृतीय-पक्ष मानकों संगठन द्वारा मान्यता प्राप्त किसी भी औपचारिक मानकीकरण का अभाव है, ओरेकल कार्यान्वयन डी वास्तविक मानक है।

ओरेकल कार्यान्वयन को दो अलग-अलग वितरणों में पैक किया गया है: जावा रनटाइम एनवायरनमेंट (जेआरई) जिसमें जावा प्रोग्राम चलाने के लिए आवश्यक जावा एसई प्लेटफॉर्म के कुछ हिस्सों को शामिल किया गया है और यह अंतिम उपयोगकर्ताओं और जावा डेवलपमेंट किट (जेडडीके) के लिए है, जिसका उद्देश्य है सॉफ्टवेयर डेवलपर्स के लिए और जावा कंपाइलर, जावदोक, जार और डिबगर जैसे विकास उपकरण शामिल हैं। Oracle ने GraalVM, एक उच्च प्रदर्शन जावा डायनामिक कंपाइलर और दुभाषिया भी जारी किया है।

OpenJDK एक और उल्लेखनीय जावा एसई कार्यान्वयन है जिसे GNU GPL के तहत लाइसेंस प्राप्त है। कार्यान्वयन तब शुरू हुआ जब सूर्य ने जीपीएल के तहत जावा स्रोत कोड जारी करना शुरू किया। जावा SE 7 के रूप में, OpenJDK आधिकारिक जावा संदर्भ कार्यान्वयन है।

जावा का लक्ष्य जावा के सभी कार्यान्वयनों को संगत बनाना है। ऐतिहासिक रूप से, जावा ब्रांड के उपयोग के लिए सन का ट्रेडमार्क लाइसेंस इस बात पर जोर देता है कि सभी कार्यान्वयन संगत हों। यह सूर्य के दावे के बाद Microsoft के साथ कानूनी विवाद के परिणामस्वरूप Microsoft कार्यान्वयन ने RMI या JNI का समर्थन नहीं किया और अपने स्वयं के प्लेटफ़ॉर्म-विशिष्ट सुविधाओं को जोड़ा था। सन ने 1997 में मुकदमा दायर किया, और 2001 में, US $ 20 मिलियन का समझौता किया, साथ ही साथ सन से लाइसेंस की शर्तों को लागू करने वाला एक अदालत का आदेश भी प्राप्त किया। [69] परिणामस्वरूप, Microsoft अब Windows के साथ जावा को शिप नहीं करता है।

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

निष्पादन प्रणाली[संपादित करें]

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

प्रदर्शन[संपादित करें]

जावा में लिखे गए कार्यक्रमों में धीमी गति से चलने और C ++ में लिखे लोगों की तुलना में अधिक मेमोरी की आवश्यकता होती है। [४४] [४५] हालाँकि, जावा कार्यक्रमों की निष्पादन गति में काफी सुधार हुआ है, जो कि जावा 1.1 के लिए 1997/1998 में जस्ट-इन-टाइम संकलन की शुरुआत के साथ बेहतर कोड एनालिसिस (जैसे इनर क्लासेस, स्ट्रिंगबर्लस्ट क्लास, अल्टरनेटिव) का समर्थन करने वाली भाषा सुविधाओं के अतिरिक्त है। दावे, आदि), और जावा वर्चुअल मशीन में अनुकूलन, जैसे कि हॉटस्पॉट सन 2000 में सन जेवीएम के लिए डिफ़ॉल्ट बन गया। जावा 1.5 के साथ, java.util.concurrent पैकेज के अतिरिक्त के साथ प्रदर्शन में सुधार किया गया था, जिसमें लॉक फ्री कार्यान्वयन भी शामिल थे। समवर्ती मोपैप और अन्य मल्टी-कोर संग्रह, और जावा 1.6 के साथ इसे और बेहतर बनाया गया था।

स्वचालित स्मृति प्रबंधन[संपादित करें]

जावा ऑब्जेक्ट जीवनचक्र में मेमोरी को प्रबंधित करने के लिए एक स्वचालित कचरा संग्राहक का उपयोग करता है। जब ऑब्जेक्ट्स बनाए जाते हैं, तो प्रोग्रामर निर्धारित करता है, और जावा रनटाइम मेमोरी को पुनर्प्राप्त करने के लिए जिम्मेदार होता है, जब ऑब्जेक्ट उपयोग में नहीं होते हैं। एक बार जब किसी ऑब्जेक्ट का कोई संदर्भ नहीं रहता है, तो अनुपयोगी मेमोरी कचरा कलेक्टर द्वारा स्वचालित रूप से मुक्त होने के योग्य हो जाती है। स्मृति रिसाव के समान कुछ तब भी हो सकता है यदि प्रोग्रामर का कोड किसी ऐसी वस्तु का संदर्भ रखता है जिसकी अब आवश्यकता नहीं है, आमतौर पर जब जरूरत की वस्तुओं को अब कंटेनर में संग्रहीत नहीं किया जाता है जो अभी भी उपयोग में हैं। यदि किसी गैर-मौजूद ऑब्जेक्ट के लिए विधियों को कहा जाता है, तो एक शून्य सूचक अपवाद फेंक दिया जाता है।

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

कचरा संग्रहण किसी भी समय हो सकता है। आदर्श रूप से, यह तब होगा जब कोई कार्यक्रम निष्क्रिय हो। यह ट्रिगर होने की गारंटी है यदि एक नई वस्तु आवंटित करने के लिए ढेर पर अपर्याप्त मुक्त मेमोरी है; यह एक कार्यक्रम को पल-पल स्टाल करने का कारण बन सकता है। जावा में स्पष्ट स्मृति प्रबंधन संभव नहीं है।

जावा सी / सी ++ शैली सूचक अंकगणितीय का समर्थन नहीं करता है, जहां ऑब्जेक्ट पते को अंकगणित रूप से जोड़-तोड़ किया जा सकता है (जैसे किसी ऑफसेट को जोड़ना या घटाना)। यह कचरा कलेक्टर को संदर्भित वस्तुओं को स्थानांतरित करने की अनुमति देता है और प्रकार की सुरक्षा और सुरक्षा सुनिश्चित करता है।

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

संदर्भ[संपादित करें]

गोसलिंग, जेम्स; खुशी, बिल; स्टील, गाइ; ब्राचा, गिलाद; बकले, एलेक्स (2014)। जावा® भाषा की विशिष्टता

लिंडहोम, टिम; येलिन, फ्रैंक (1999)। जावा वर्चुअल मशीन विशिष्टता