डाल्विक (सॉफ्टवेयर)

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

डाल्विक का उत्तराधिकारी एंड्रॉइड रनटाइम (एआरटी) है, जो समान बाइटकोड और .dex फ़ाइलों (लेकिन .odex फ़ाइलों का नहीं) का उपयोग करता है, उत्तराधिकार का लक्ष्य प्रदर्शन में सुधार करना है। नए रनटाइम वातावरण को पहली बार एंड्रॉइड 4.4 किटकैट में तकनीकी पूर्वावलोकन के रूप में शामिल किया गया था, और बाद के संस्करणों में डाल्विक को पूरी तरह से बदल दिया; एंड्रॉइड लॉलीपॉप|एंड्रॉइड 5.0 लॉलीपॉप पहला संस्करण है जिसमें एआरटी एकमात्र रनटाइम शामिल है।

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

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

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

Google के अनुसार, डाल्विक का डिज़ाइन एक डिवाइस को VM के कई उदाहरणों को कुशलतापूर्वक चलाने की अनुमति देता है। Android Froyo|Android 2.2 Froyo दलविक में समय-समय पर संकलन का पता लगाना लाया। (कंप्यूटिंग) अक्सर उनके बाइटकोड के छोटे खंडों को मूल मशीन कोड में निष्पादित करता है। जबकि डाल्विक इंटरप्रेटर (कंप्यूटिंग) एप्लिकेशन के बाकी बाइटकोड को, उन छोटे बाइटकोड सेगमेंट का मूल निष्पादन, जिन्हें ट्रेस कहा जाता है, महत्वपूर्ण प्रदर्शन सुधार प्रदान करता है।

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

2010 में ओरेकल कॉर्पोरेशन (जावा तकनीक के मालिक) द्वारा मानक गैर-ग्राफिकल जावा बेंचमार्क के साथ एआरएम आर्किटेक्चर परिवार # 32-बिट_आर्किटेक्चर उपकरणों पर किए गए परीक्षणों से पता चला कि एंबेडेड जावा # जावा एसई का हॉटस्पॉट (वर्चुअल मशीन) वीएम 2-3 एम्बेडेड है। Android Froyo|Android 2.2 (प्रारंभिक Android रिलीज़ जिसमें JIT कंपाइलर शामिल था) के JIT कंपाइलर-आधारित डाल्विक VM से कई गुना तेज़। 2012 में, अकादमिक बेंचमार्क ने एक ही एंड्रॉइड बोर्ड पर हॉटस्पॉट (वर्चुअल मशीन) और डाल्विक के बीच 3 के कारक की पुष्टि की, यह भी ध्यान दिया कि डाल्विक कोड हॉटस्पॉट से छोटा नहीं था। आगे,, एंड्रॉइड डिवाइस पर किए गए बेंचमार्क अभी भी उसी एंड्रॉइड डिवाइस पर मूल एप्लिकेशन और डाल्विक एप्लिकेशन के बीच कारक 100 तक दिखाते हैं। 2009 के प्रारंभिक दुभाषिया का उपयोग करके बेंचमार्क चलाने पर, जावा नेटिव इंटरफ़ेस (जेएनआई) और नेटिव कोड दोनों ने तीव्रता का क्रम दिखाया।

लाइसेंसिंग और पेटेंट
डाल्विक को अपाचे लाइसेंस 2.0 की शर्तों के तहत प्रकाशित किया गया है। कुछ कहते हैं कि डाल्विक एक मानक जावा रनटाइम के शीर्ष पर विकास के बजाय एक साफ़ कमरे का डिज़ाइन|क्लीन-रूम कार्यान्वयन है, जिसका अर्थ यह होगा कि यह मानक-संस्करण या ओपन-सोर्स-संस्करण से कॉपीराइट-आधारित लाइसेंस प्रतिबंध प्राप्त नहीं करता है। जावा रनटाइम. Oracle Corporation और कुछ समीक्षक इस पर विवाद करते हैं। 12 अगस्त 2010 को, ओरेकल कॉर्पोरेशन, जिसने अप्रैल 2009 में सन माइक्रोसिस्टम्स का अधिग्रहण किया था और इसलिए उसके पास जावा के अधिकार हैं, ने कॉपीराइट और पेटेंट के कथित उल्लंघन पर Google पर मुकदमा दायर किया। Oracle ने आरोप लगाया कि Google ने Android विकसित करते समय जानबूझकर, सीधे और बार-बार Oracle की जावा-संबंधित बौद्धिक संपदा का उल्लंघन किया।  मई 2012 में, इस मामले में जूरी ने पाया कि Google ने Oracle के पेटेंट का उल्लंघन नहीं किया है, और ट्रायल जज ने फैसला सुनाया कि Google द्वारा उपयोग की जाने वाली Java API की संरचना कॉपीराइट योग्य नहीं थी।  पार्टियां कॉपी किए गए कोड की 9 पंक्तियों के लिए वैधानिक क्षति में शून्य डॉलर पर सहमत हुईं।

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

बाहरी संबंध

 * Dalvik bytecode – official Android documentation of the instruction set
 * Dex Executable format – official Android documentation
 * , Google I/O 2010, by Ben Cheng and Bill Buzbee
 * Dalvik VM Internals, Google I/O 2008, by Dan Bornstein
 * The $800 Million Dollar Question: What’s the Difference Between Trademark and Copyright?