जावा की आलोचना

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

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

जेनेरिक्स
जब सामान्य प्रोग्रामिंग को जावा 5.0 में जोड़ा गया था, तो पहले से ही कक्षाओं का एक बड़ा ढांचा उपस्थित था, जिनमें से कई पहले से ही प्रतिवाद थे, इसलिए माइग्रेशन अनुकूलता और इनके पुन: उपयोग की अनुमति देने के लिए जेनेरिक को जावा प्रकार के क्षरण के साथ समस्याओं में जेनेरिक का उपयोग करके लागू किया गया था। उपलब्ध कक्षाएं इसने अन्य भाषाओं की तुलना में प्रदान की जा सकने वाली सुविधाओं को सीमित कर दिया।  चूँकि जेनेरिक को प्रकार मिटाना का उपयोग करके कार्यान्वित किया जाता है, इसलिए टेम्पलेट पैरामीटर E का वास्तविक प्रकार रन टाइम पर अनुपलब्ध होता है। इस प्रकार, जावा में निम्नलिखित संचालन संभव नहीं हैं: 2016 में, निम्नलिखित उदाहरण द्वारा पता चला कि जावा गड़बड़ है और इसलिए वापस जवास्क्रिप्ट वर्चुअल मशीन जिन्होंने क्लासकास्टएक्सेप्शन या किसी अन्य प्रकार की रनटाइम त्रुटि फेंकी, तकनीकी रूप से असंगत हैं। यह जावा 10 में सुधारित किया गया था।

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

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

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

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

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

बड़ी सारणियाँ
2 की सरणियों का समर्थन न करने के लिए जावा की आलोचना की गई है31(लगभग 2.1 अरब) या अधिक तत्व। यह भाषा की एक सीमा है; जावा भाषा विशिष्टता, धारा 10.4, बताती है कि: सरणी को पूर्णांक मानों द्वारा अनुक्रमित किया जाना चाहिए... एक लंबे सूचकांक मान के साथ एक सरणी घटक तक पहुंचने का प्रयास एक संकलन-समय त्रुटि में परिणामित होता है।  बड़े सरणियों का समर्थन करने के लिए JVM में बदलाव की भी आवश्यकता होगी। यह सीमा 2 बिलियन तत्वों तक सीमित होने वाले संग्रह जैसे क्षेत्रों में स्वयं प्रकट होती है और 2 जीबी से बड़े निरंतर फ़ाइल खंडों को मेमोरी मैप करने में असमर्थता। जावा में (इसके 2डी सरणियों के अलावा) बहुआयामी सरणियों (एकल अप्रत्यक्ष द्वारा एक्सेस की गई मेमोरी के लगातार आवंटित एकल ब्लॉक) का भी अभाव है, जो वैज्ञानिक और तकनीकी कंप्यूटिंग के लिए प्रदर्शन को सीमित करता है। जावा में सरणियों को आरंभ करने का कोई प्रभावी तरीका नहीं है। किसी सरणी की घोषणा करते समय, JVM इसे निर्देशों के साथ बाइटकोड में संकलित करता है जो रन टाइम पर इसके तत्वों को एक-एक करके सेट करता है। चूँकि जावा विधियाँ 64KB से बड़ी नहीं हो सकतीं, कोड में सीधे निर्दिष्ट मानों के साथ मामूली आकार की सारणियाँ भी त्रुटि संदेश फेंकेंगी: संकलन पर कोड बहुत बड़ा है।

आदिम और सरणियों का एकीकरण
ऐरे और प्रिमिटिव कुछ हद तक विशेष हैं और इन्हें कक्षाओं से अलग तरीके से व्यवहार करने की आवश्यकता है। इसकी आलोचना की गई है क्योंकि सामान्य प्रयोजन पुस्तकालय बनाते समय इसके लिए कई प्रकार के कार्यों की आवश्यकता होती है।

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

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

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

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

लैम्ब्डा अभिव्यक्ति
जब तक जावा 8 ने अनाम फ़ंक्शन पेश नहीं किया, तब तक एक विधि को किसी अन्य विधि के पैरामीटर के रूप में पास करना मुश्किल था।

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

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

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

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

2010 में, ओरेकल सहित जावा कार्यान्वयन द्वारा उपयोग किए जाने वाले सैंडबॉक्सिंग तंत्र में सुरक्षा खामियों को लक्षित करने वाले दुर्भावनापूर्ण सॉफ़्टवेयर में उल्लेखनीय वृद्धि हुई थी। ये खामियाँ अविश्वसनीय कोड को सैंडबॉक्स प्रतिबंधों को बायपास करने की अनुमति देती हैं, जिससे उपयोगकर्ता पर हमला होता है। सुरक्षा अद्यतनों द्वारा खामियाँ ठीक कर दी गईं, लेकिन अद्यतनों के बिना भी मशीनों पर उनका शोषण किया गया। आलोचकों ने सुझाव दिया है कि उपयोगकर्ता अपने जावा इंस्टॉलेशन को अपडेट न करें क्योंकि वे नहीं जानते कि यह उनके पास है, या उन्हें कैसे अपडेट किया जाए। कई संगठन उपयोगकर्ताओं द्वारा सॉफ़्टवेयर इंस्टॉलेशन को प्रतिबंधित करते हैं, लेकिन अपडेट को तैनात करने में धीमे होते हैं। ज्ञात सुरक्षा बगों के लिए तुरंत अपडेट उपलब्ध नहीं कराने के लिए Oracle Corporation की आलोचना की गई है। जब ओरेकल ने अंततः जावा 7 में व्यापक रूप से उपयोग की गई खामियों के लिए एक पैच जारी किया, तो उसने उपयोगकर्ताओं की मशीनों से जावा 6 को हटा दिया, बावजूद इसके कि एंटरप्राइज़ अनुप्रयोगों द्वारा इसका व्यापक रूप से उपयोग किया जा रहा था, जिसके बारे में ओरेकल ने कहा था कि वे खामियों से प्रभावित नहीं थे। 2007 में, मार्क पिस्तोइया  के नेतृत्व में एक शोध दल ने जावा सुरक्षा मॉडल की एक और महत्वपूर्ण खामी को उजागर किया, स्टैक निरीक्षण के आधार पर। जब एक सुरक्षा-संवेदनशील संसाधन तक पहुंच प्राप्त की जाती है, तो सुरक्षा प्रबंधक कोड को ट्रिगर करता है जो कॉल स्टैक पर चलता है, यह सत्यापित करने के लिए कि उस पर प्रत्येक विधि के कोडबेस के पास संसाधन तक पहुंचने का अधिकार है। ऐसा कन्फ्यूज्ड डिप्टी समस्या को रोकने के लिए किया जाता है, जो हर बार तब होती है जब एक वैध, अधिक विशेषाधिकार प्राप्त कार्यक्रम को दूसरे द्वारा अपने अधिकार का दुरुपयोग करने के लिए धोखा दिया जाता है। भ्रमित-डिप्टी समस्या एक विशिष्ट प्रकार की विशेषाधिकार वृद्धि है। पिस्तोइया ने देखा कि जब सुरक्षा-संवेदनशील संसाधन तक पहुंच बनाई जाती है, तो संसाधन प्राप्त करने के लिए जिम्मेदार कोड अब स्टैक पर नहीं हो सकता है। उदाहरण के लिए, अतीत में निष्पादित एक विधि ने किसी ऑब्जेक्ट फ़ील्ड के मान को संशोधित किया हो सकता है जो यह निर्धारित करता है कि किस संसाधन का उपयोग करना है। निरीक्षण के समय वह विधि कॉल स्टैक पर नहीं रह सकती है।

कुछ अनुमतियाँ परोक्ष रूप से जावा के समतुल्य हैं. इनमें वर्तमान सुरक्षा प्रबंधक को बदलने की अनुमति (और इसे ऐसे प्रबंधक से बदलना जो संभावित रूप से स्टैक निरीक्षण को बायपास कर सकता है), कस्टम क्लास लोडर को इंस्टेंट करने और उपयोग करने की अनुमति (जो संबद्ध करना चुन सकता है) शामिल है  इसे लोड करने पर एक दुर्भावनापूर्ण वर्ग के लिए), और एक कस्टम अनुमति बनाने की अनुमति (जो खुद को उतना शक्तिशाली घोषित कर सकती है)।   इसके माध्यम से   तरीका)। ये मुद्दे जावा सुरक्षा पर पिस्तोइया की दो पुस्तकों में प्रलेखित हैं: -4 जावा 2 नेटवर्क सुरक्षा (द्वितीय संस्करण) और एंटरप्राइज जावा सुरक्षा।

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

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

जावा 7 ने अपने पुराने संस्करणों को अपडेट किया, लेकिन जावा 6 या उससे पहले के संस्करणों को अपडेट नहीं किया।

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

2015 तक, जावा 8 को अभी भी उपयोगकर्ताओं को स्वयं जावा अपडेट करने की आवश्यकता है। लेकिन विंडोज़ पर केवल प्रशासकीय विशेषाधिकार वाले लोग ही सॉफ़्टवेयर अपडेट कर सकते हैं। विंडोज़ जावा अपडेटर अक्सर एक विघटनकारी उपयोगकर्ता खाता नियंत्रण उन्नयन संकेत को ट्रिगर करता है: जो भी उपयोगकर्ता चुनते हैं, उन्हें अभी भी वही जावा को अद्यतन करने की आवश्यकता है संदेश मिलता है।

जेआईटी संबंधित सुरक्षा चुनौतियाँ और संभावित कारनामे
जेआईटी संकलन मूल रूप से निष्पादन योग्य डेटा का उपयोग करता है, और इस प्रकार सुरक्षा चुनौतियां और संभावित शोषण उत्पन्न करता है।

यह भी देखें

 * जावा और सी++ की तुलना
 * जावा और सी शार्प की तुलना|जावा और सी# की तुलना
 * जावा और .NET प्लेटफॉर्म की तुलना
 * जावा प्रदर्शन
 * एक बार लिखो, कहीं भी दौड़ो
 * स्काला (प्रोग्रामिंग भाषा), जावा की आलोचनाओं को संबोधित करने के लिए  प्रारूपित  की गई एक प्रोग्रामिंग भाषा

बाहरी संबंध

 * Free But Shackled - The Java Trap, an essay by Richard Stallman of the free software movement (dated April 12, 2004)
 * Computer Science Education: Where Are the Software Engineers of Tomorrow? (dated January 8, 2008)
 * What are Bad features of Java?

Java (Technik)