Android जावा का उपयोग क्यों करता है? [बन्द है]


114

ठीक है, यह वास्तव में Google से किसी से पूछा जाना चाहिए, लेकिन मैं सिर्फ अन्य राय चाहता हूं।

यहां तक ​​कि Android मूल कोड अनुप्रयोगों का समर्थन करता है, मुख्य विकास उपकरण जावा है। पर क्यों? मेरा मतलब है, मोबाइल डिवाइस पर कोड की व्याख्या करना बहुत धीमा नहीं है? Froyo को पेश करते समय, Google ने कहा कि नए JIT कंपाइलर 2-5 गुना तेज एप्लिकेशन प्राप्त कर सकते हैं। इसका मतलब है, कि मूल कोड पर जावा का उपयोग करना 2-x गुना धीमा है।

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


12
जावा कोड की व्याख्या नहीं की गई है, कम से कम एंड्रॉइड पर नहीं - यह एक आभासी मशीन पर संकलित और चलाया गया है।
रेडोमिर डोपिएरल्स्की

4
मैंने सोचा कि सन साबित हुआ कि जावा (कुछ क्षेत्रों में, लेकिन काफी अक्सर लगभग) मूल कोड के रूप में तेज़ हो सकता है? इसके अलावा, Google के लोग एक स्मार्ट पैक हैं - मुझे विश्वास है कि हाल ही में उन्होंने जो JIT पेश किया है वह बहुत जल्द या बाद में बहुत अच्छा कोड तैयार करेगा।

1
@ b-gen-jack-o-neill जवाब वास्तव में नहीं है, क्योंकि वीएम यह बता सकता है कि रनटाइम पर किस कोड को निष्पादित किया जा रहा है, और इसे कैसे निष्पादित किया जा रहा है। उदाहरण के लिए, Apple रनवे पर प्रदर्शन-महत्वपूर्ण ग्राफिक्स कार्यों के अनुकूलन के स्पष्ट उद्देश्य के लिए OS X में LLVM का उपयोग करता है। यह विशेष रूप से किया जाता है क्योंकि यह देशी-कोड तकनीकों से तेज है।
पीटरअलेनवेब

1
@ b-gen-jack-o-neill, Java bytecode को रनटाइम पर मूल कोड में संकलित किया जा सकता है।
माइक डेनियल

1
@ b-gen-jack-o-neill - VM के पास विशिष्ट संकलक की तुलना में अधिक सावधानी वाले वातावरण के बारे में अधिक जानकारी है, इस प्रकार यह अधिक बुद्धिमान विकल्प बना सकता है। यह किस हद तक अतिरिक्त ओवरहेड ऐप से ऐप के लिए अलग-अलग होगा।
कर्टनडॉग

जवाबों:


98

कुछ बिंदु:

  1. जावा एक ज्ञात भाषा है, डेवलपर्स इसे जानते हैं और इसे सीखना नहीं है

  2. अपने आप को जावा के साथ सी / सी ++ कोड की तुलना में शूट करना मुश्किल है क्योंकि इसमें कोई सूचक अंकगणित नहीं है

  3. यह एक वीएम में चलता है, इसलिए इसे हर फोन के लिए फिर से जोड़ने और सुरक्षित करने के लिए आसान करने की आवश्यकता नहीं है

  4. जावा के लिए बड़ी संख्या में विकास उपकरण (देखें बिंदु 1)

  5. कई मोबाइल फोन पहले से ही जावा एमई का उपयोग करते थे, इसलिए जावा उद्योग में जाना जाता था

  6. अधिकांश अनुप्रयोगों के लिए गति अंतर कोई समस्या नहीं है; यदि यह था तो आपको निम्न-स्तरीय भाषा में कोड करना चाहिए


5
VM (इस प्रकार कोई recompiling) पर चलना एक बहुत बड़ा प्लस है। इसके अलावा, यह आसानी से एक दूसरे से प्रक्रियाओं को अलग करता है, एक दुष्ट अनुप्रयोग को आपके फोन को नष्ट करने या अन्य अनुप्रयोगों के साथ हस्तक्षेप करने से रोकता है
फल्मरी

1
बदमाश आवेदन के बारे में - यह दिलचस्प लगता है। गलत होने पर मुझे सही करें, लेकिन x86 सीपीयू में पेजिंग और रिंग मोड के माध्यम से सुरक्षा में पक्षपात होता है, इसलिए एप्लिकेशन इसके पृष्ठ को मेमोरी में नहीं बदल सकता है इसलिए ओएस एपीआई का उपयोग करने के अलावा किसी अन्य ऐप के साथ हस्तक्षेप नहीं कर सकता है। लेकिन क्या इस फीचर में ARM CPU हैं? मुझे वास्तव में कोई पता नहीं है। यदि नहीं, तो यह इस प्लेटफॉर्म पर जावा के लिए बहुत अच्छा होगा।
बी.जन.जैक .न्यूइल

सीपीयू को दुर्भावनापूर्ण आवेदन करने से कोई लेना-देना नहीं है
फाल्मरी

4
मेमोरी सुरक्षा कुछ सीपीयू आर्किटेक्चर का हिस्सा है। यह एक दुर्भावनापूर्ण एप्लिकेशन को एक अलग एप्लिकेशन को सौंपी गई मेमोरी तक पहुंचने से रोकता है। en.wikipedia.org/wiki/Memory_protection
josefx

1
@Falmarri: हाँ, यह करता है। मूल रूप से इसकी बहुत सरल है। आपके एप्लिकेशन ने अपना स्वयं का स्थान निर्दिष्ट किया है। आपके द्वारा उपयोग किए जाने वाले सभी विज्ञापन MMU द्वारा अनुवादित हैं। आप प्रवेश 0x0000 तक पहुँचना चाहते हैं और MMU इसका उदाहरण 0x0E21 में देता है। और आधार एड्रेस को बदलने के लिए आपको रोकने के लिए, इसके निजीकृत निर्देश और ओएस द्वारा शुरू किए गए आपके प्रोग्राम ने सबसे कम निजीकृत स्तर सौंपा है। यदि नहीं, तो एकल सीएलआई (निष्क्रिय व्यवधान) निर्देश क्रैश सिस्टम होगा ....
B.Gen.Jack.O.Nill

39

बाइट-कोड स्तर पर, एंड्रॉइड जावा का उपयोग नहीं करता है। स्रोत जावा है, लेकिन यह JVM का उपयोग नहीं करता है।


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

1
यह अभी भी जावा vm के अधिकांश कार्यों का समर्थन करता है। इसलिए वे उन लोगों का अनुकूलन नहीं कर सकते।
जोसेफ

1
फिर एंड्रॉइड में विकसित होने पर जेडीके को स्थापित करने की आवश्यकता क्यों है? क्या यह सिर्फ एमुलेटर के लिए है?
जिगुनगंज

जावा में @jiggunjer Android Studio विकसित किया गया है। और इसलिए एमुलेटर है।
रुद्र बी। सारस्वत

20

सेल फोन जैसे उपकरण पर सिस्टम स्थिरता में सुधार बहुत महत्वपूर्ण है।

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

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

इसके अलावा, जावा का उपयोग करने से यह कम संभावना है कि जो लोग लिखते हैं, वे स्वयं शोषक होंगे। कोई बफ़र-ओवररन, पॉइंटर्स के साथ गलतियाँ, आदि ...


डेविड का एक अन्य उत्तर कहता है कि एंड्रॉइड jvm
Ssenyonjo

13

मूल रूप से जावा कोड की तुलना में मूल कोड कोई तेज नहीं है। आपका प्रोफ़ाइल डेटा कहां दिखा रहा है कि मूल कोड तेज़ी से चल सकता है?

क्यों जावा?

  • एंड्रॉइड कई अलग-अलग हार्डवेयर प्लेटफार्मों पर चलता है। आपको किसी भी वास्तविक लाभ को देखने के लिए इन विभिन्न प्लेटफार्मों में से प्रत्येक के लिए अपने मूल कोड को संकलित और अनुकूलित करने की आवश्यकता होगी।

  • जावा में पहले से ही बड़ी संख्या में डेवलपर्स हैं।

  • डेवलपर्स के जीवन को आसान बनाने के लिए जावा में कई स्रोतों और उपकरणों के साथ खुला स्रोत समर्थन है।

  • जावा आपको देशी कोड में निहित कई समस्याओं से बचाता है, जैसे मेमोरी लीक, खराब पॉइंटर उपयोग, आदि।

  • जावा उन्हें सैंडबॉक्स एप्लिकेशन बनाने, और एक बेहतर सुरक्षा मॉडल बनाने की अनुमति देता है ताकि एक खराब ऐप आपके पूरे ओएस को नीचे न ले जाए।


7

Google के अनुसार, सबसे पहले, Android जावा का उपयोग नहीं करता है। इसलिए ओरेकल गूगल पर मुकदमा कर रहा है। ओरेकल का दावा है कि एंड्रॉइड कुछ जावा तकनीक पर उल्लंघन करता है, लेकिन Google का कहना है कि यह Dalvik है।

दूसरी बात, मैंने 1995 से जावा बाइट कोड दुभाषिया नहीं देखा है।

क्या आप कुछ वास्तविक बेंचमार्क के साथ अपने प्रदर्शन का अनुमान लगा सकते हैं? आपके अनुमानों का दायरा आपके द्वारा प्रदान की गई गलत पृष्ठभूमि की जानकारी को देखते हुए उचित नहीं लगता है।


4

Google के पास Android में इसका उपयोग करने के लिए जावा का एक बहुत ही आकर्षक तर्क है: इसका डेवलपर्स का एक बड़ा आधार है। ये सभी डेवलपर अपने मोबाइल प्लेटफॉर्म के लिए विकसित होने के लिए तैयार हैं।

ध्यान रखें कि, तकनीकी रूप से, एंड्रॉइड शुद्ध जावा का उपयोग नहीं करता है ।


2
मुझे लगता है कि मोबाइल विकास में रुचि रखने वाले सभी लोग जावा की तुलना में "कूलर" भाषाओं में भी रुचि रखते हैं।
अर्लज़

4

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

अंत में, मैं कहूंगा कि यह भविष्य के खिलाफ एक दांव है - जो भी प्रदर्शन के मुद्दे मौजूद हैं वे अप्रासंगिक हो जाएंगे क्योंकि हार्डवेयर में सुधार होगा, डेवलपर्स को एक अमूर्त के खिलाफ कोड करने के लिए समान रूप से, Google चीर-बाहर हो सकता है और अंतर्निहित ओएस को आसानी से बदल सकता है, जैसे कि डेवलपर्स POSIX / Unix API को कोड कर रहे थे।

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

यह देखते हुए कि लगभग सभी वीएम जेआईटी देशी कोड के लिए संकलित हैं, कच्चे कोड की गति अक्सर मूल गति के साथ तुलनीय होती है। उच्च-स्तरीय भाषाओं के लिए जिम्मेदार बहुत सी देरी अन्य कारकों की तुलना में वीएम ओवरहेड के साथ करने के लिए कम है (एक जटिल वस्तु क्रम, 'सुरक्षा' सीमा की जाँच करके मेमोरी एक्सेस की जाँच)।

यह भी याद रखें कि किसी एप्लिकेशन को लिखने के लिए उपयोग की जाने वाली भाषा की परवाह किए बिना, निचले स्तर के एपीआई में बहुत सारे वास्तविक काम किए जाते हैं। शीर्ष स्तर की भाषा अक्सर एपीआई कॉलिंग का एक साथ पीछा करती है।

बेशक, इस नियम के कई अपवाद हैं - गेम, ऑडियो और ग्राफिक्स ऐप जो फोन हार्डवेयर की सीमाओं को धक्का देते हैं। यहां तक ​​कि iOS पर भी, डेवलपर्स अक्सर इन क्षेत्रों में गति प्राप्त करने के लिए C / C ++ तक छोड़ देते हैं।


1

नई JIT पुरानी dalvikVM (दोनों JAVA) की तुलना में 2 - 5 गुना तेजी से एप्लिकेशन चला रही है। इसलिए JAVA पर C की तुलना नहीं है, लेकिन dalvikVM के ऊपर JIT है।


1

सबसे पहले यह एक ही चीज के बारे में है विंडोज़ मोबाइल या आईफोन, .नेट फ्रेमवर्क को अपने स्वयं के वीएम के साथ-साथ कोको की आवश्यकता होती है।

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

समाप्त करने के लिए, कोई भी प्रदर्शन उतना बुरा नहीं है, इसीलिए जावा का उपयोग छोटे उपकरणों पर भी किया जाता है (देखें JavaMe)।


कोको का वीएम आधारित नहीं है - यह सभी संकलित देशी कोड है - लेकिन शुद्ध सी / सी ++ के विपरीत इसमें एक गतिशील रनटाइम (स्मॉलटॉक / रूबी / पायथन के समान) है - जिसके स्वयं के प्रदर्शन के मुद्दे और अनुकूलन हैं। यह उल्लेखनीय है कि अधिकांश आईफोन गेम ओब्ज-सी के बजाय काफी हद तक सी ++ हैं।
जूल्सलेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.