आप दो अलग-अलग प्रश्न पूछ रहे हैं:
- क्या जावा वास्तव में धीमा है, और यदि ऐसा है तो क्यों?
- जावा को धीमा क्यों माना जाता है, भले ही यह कई विकल्पों से तेज हो?
इनमें से पहला है "कम से कम एक रस्सी कितनी लंबी है" इस तरह का सवाल है। यह आपकी "धीमी" की परिभाषा के नीचे आता है। एक शुद्ध दुभाषिया की तुलना में, जावा बहुत तेज है। अन्य भाषाओं की तुलना में जो (सामान्य रूप से) किसी प्रकार के बायटेकोड के लिए संकलित की जाती हैं, तो गतिशील रूप से मशीन कोड (जैसे C # या .NET पर कुछ और) के लिए संकलित किया जाता है, जावा मोटे तौर पर बराबर होता है। उन भाषाओं की तुलना में जो आम तौर पर शुद्ध मशीन कोड के लिए संकलित की जाती हैं, और उनके (अक्सर बड़ी) टीमों में काम करने वाले लोगों की कुछ भी नहीं होती है, लेकिन अपने ऑप्टिमाइज़र (जैसे C, C ++, फोरट्रान, एडा) को बेहतर बनाने के लिए जावा कुछ चीजों पर बहुत अच्छा करता है , लेकिन कुल मिलाकर कम से कम कुछ धीमा हो जाता है।
यह बहुत कुछ मुख्य रूप से कार्यान्वयन से संबंधित है - मूल रूप से, यह इस तथ्य से नीचे आता है कि एक उपयोगकर्ता प्रतीक्षा कर रहा है जबकि एक गतिशील / जेआईटी कंपाइलर चलता है, इसलिए जब तक आपके पास एक प्रोग्राम नहीं है जो शुरू करने के लिए काफी समय तक चलता है, यह कंपाइलर का औचित्य साबित करना कठिन अनुकूलन पर बहुत समय बिताता है। इसलिए, अधिकांश जावा (और सी #, आदि) संकलक वास्तव में कठिन अनुकूलन में बहुत प्रयास नहीं करते हैं। बहुत सारे मामलों में, यह अनुकूलन के बारे में कम है कि वे कहाँ लागू होते हैं। कई अनुकूलन समस्याएं एनपी पूरी होती हैं, इसलिए वे जिस समय लेते हैं समस्या के आकार के साथ तेज़ी से बढ़ते हैं। कारण के भीतर समय रखने का एक तरीका केवल यह है कि एक बार में एक ही फ़ंक्शन की तरह अनुकूलन को लागू करें। जब यह केवल डेवलपर के लिए इंतजार कर रहा है, आप बहुत अधिक समय ले सकते हैं, और कार्यक्रम के बहुत बड़े हिस्से में वही अनुकूलन लागू कर सकते हैं। इसी तरह, कुछ अनुकूलन के लिए कोड बहुत बालों वाला है (और इसलिए बहुत बड़ा हो सकता है)। फिर से, चूंकि उपयोगकर्ता प्रतीक्षा कर रहा है कि कोड लोड हो रहा है (और समग्र समय में JVM स्टार्टअप समय अक्सर एक महत्वपूर्ण कारक है), कार्यान्वयन को एक स्थान पर सहेजे गए समय को शेष बनाम दूसरे में खो दिया - और कितना कम कोड दिया जाता है बालों के अनुकूलन से लाभ, जेवीएम को छोटा रखना आमतौर पर अधिक फायदेमंद होता है।
एक दूसरी समस्या यह है कि जावा के साथ, आप अक्सर अधिक या कम "एक आकार सभी" प्रकार के समाधान प्राप्त करते हैं। उदाहरण के लिए, कई जावा डेवलपर्स के लिए स्विंग आवश्यक रूप से केवल एक ही उपलब्ध लाइब्रेरी है। C ++ जैसी किसी चीज़ में, वस्तुतः दर्जनों विंडोिंग लाइब्रेरी, एप्लिकेशन फ्रेमवर्क इत्यादि हैं, जिनमें से प्रत्येक का उपयोग आसानी से होने वाले बनाम तेज़ निष्पादन, सुसंगत लुक और फील बनाम देशी लुक और फील, और इसी तरह के बीच समझौता है। एकमात्र वास्तविक स्टिकिंग बिंदु यह है कि कुछ (जैसे Qt) काफी महंगे (कम से कम व्यावसायिक उपयोग के लिए) हो सकते हैं।
C ++ (और C इससे भी अधिक) में लिखा गया तीसरा बहुत सा कोड बस पुराना और अधिक परिपक्व है। इसमें बहुत से दशकों पहले लिखी गई दिनचर्या का एक कोर शामिल है, जब अतिरिक्त समय खर्च करने से कोड का सामान्य, अपेक्षित व्यवहार होता है। यह अक्सर कोड में एक वास्तविक लाभ होता है जो छोटा और तेज होता है। C ++ (या C) कोड के छोटे और तेज़ होने का श्रेय प्राप्त करता है, लेकिन यह वास्तव में डेवलपर का एक उत्पाद है और कोड लिखे जाने के समय की कमी है। एक हद तक, यह एक आत्म-पूर्ण भविष्यवाणी की ओर जाता है - जब लोग गति के बारे में परवाह करते हैं, तो वे अक्सर C ++ का चयन करते हैं क्योंकि इसमें वह प्रतिष्ठा होती है। वे अतिरिक्त समय और प्रयास को अनुकूलन में डालते हैं, और तेजी से सी ++ कोड की एक नई पीढ़ी लिखी जाती है।
संक्षेप में, जावा का सामान्य कार्यान्वयन अधिकतम अनुकूलन समस्या को सबसे अच्छा बनाता है। इससे भी बदतर, जहाँ जावा दिखाई देता है , वहाँ विंडोिंग टूलकिट और जेवीएम स्टार्टअप समय जैसी चीजें अक्सर भाषा की निष्पादन गति की तुलना में बड़ी भूमिका निभाती हैं। बहुत सारे मामलों में, C और C ++ को भी श्रेय मिलता है कि वास्तव में अनुकूलन में केवल कठिन परिश्रम करने का उत्पाद क्या है।
दूसरे प्रश्न के रूप में, मुझे लगता है कि यह काम पर काफी हद तक मानव स्वभाव की बात है। कुछ zealots जावा के बारे में नहीं बल्कि फुलाया जा रहा है कि दावा तेजी से किया जा रहा है। कोई इसे आज़माता है, और पाता है कि एक तुच्छ कार्यक्रम शुरू होने में कुछ सेकंड लगते हैं, और जब यह चलता है तो धीमा और भद्दा लगता है। कुछ शायद चीजों का विश्लेषण करने में परेशान करते हैं, यह महसूस करने के लिए कि यह बहुत बड़ा है, जेवीएम का स्टार्टअप समय है, और यह तथ्य कि जब वे पहली बार चीजों को आज़माते हैं, तो कोई भी कोड अभी तक संकलित नहीं किया गया है - कुछ कोड की व्याख्या की जा रही है, और कुछ इंतजार करते हुए संकलित किया जा रहा है। इससे भी बदतर, जब यह काफी तेजी से चलता है, तो लुक और फील आमतौर पर ज्यादातर उपयोगकर्ताओं को विदेशी और अनाड़ी लगता है, इसलिए भले ही वस्तुनिष्ठ माप तेजी से प्रतिक्रिया समय दिखाए, फिर भी यह अनाड़ी लगेगा।
उन लोगों को एक साथ जोड़ने से काफी सरल और प्राकृतिक प्रतिक्रिया होती है: कि जावा धीमा, बदसूरत और अनाड़ी है। प्रचार को यह कहते हुए कि यह वास्तव में बहुत तेज़ है, इसमें (अधिक सटीक) "थोड़ा धीमे, और ज्यादातर विशिष्ट परिस्थितियों में" के बजाय इसे बहुत धीमी गति से समाप्त करने के बारे में सोचना है। यह आमतौर पर एक डेवलपर के लिए सबसे खराब होता है जो भाषा में पहले कुछ प्रोग्राम लिखता है। अधिकांश भाषाओं में "हैलो वर्ल्ड" प्रोग्राम का निष्पादन तात्कालिक प्रतीत होता है, लेकिन जावा में जेवीएम शुरू होते ही आसानी से बोधगम्य ठहराव होता है। यहां तक कि एक शुद्ध दुभाषिया जो तंग छोरों पर बहुत धीरे-धीरे चलता है और इस तरह से कोड के लिए अभी भी तेजी से दिखाई देगा, बस इसलिए कि यह लोड हो सकता है और थोड़ी जल्दी निष्पादित करना शुरू कर सकता है।