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

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

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

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

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

अहस्ताक्षरित पूर्णांक प्रकार
जावा में मूल अहस्ताक्षरित पूर्णांक प्रकारों का अभाव है। अहस्ताक्षरित डेटा अक्सर C (प्रोग्रामिंग भाषा) में लिखे गए प्रोग्रामों से उत्पन्न होता है, और इन प्रकारों की कमी C और Java के बीच सीधे डेटा इंटरचेंज को रोकती है। क्रिप्टोग्राफी सहित कई संख्यात्मक प्रसंस्करण क्षेत्रों में अहस्ताक्षरित बड़ी संख्याओं का भी उपयोग किया जाता है, जो इन कार्यों के लिए जावा का उपयोग करने को और अधिक असुविधाजनक बना सकता है। हालाँकि रूपांतरण कोड और बड़े डेटा प्रकारों का उपयोग करके इस समस्या से निपटना संभव है, लेकिन यह अहस्ताक्षरित डेटा को संभालने के लिए जावा का उपयोग करना बोझिल बना देता है। जबकि 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)