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

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

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

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

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

इस प्रकार से जावा .class फ़ाइलों को .dex प्रारूप में परिवर्तित करने के लिए  नामक टूल का उपयोग किया जाता है। एक ही .dex फ़ाइल में एकाधिक क्लास (कंप्यूटर विज्ञान) सम्मिलित हैं। अतः अनुलिपि स्ट्रिंग (कंप्यूटर विज्ञान) और कई क्लास फ़ाइलों में उपयोग किए जाने वाले अन्य स्थिरांक को स्थान बचाने के लिए .dex आउटपुट में मात्र एक बार सम्मिलित किया जाता है। जावा बाइटकोड को डाल्विक वीएम द्वारा उपयोग किए जाने वाले वैकल्पिक निर्देश समूह में भी परिवर्तित किया जाता है। असम्पीडित .dex फ़ाइल सामान्यतः समान .class फ़ाइलों से प्राप्त डेटा संपीड़न जेएआर (फ़ाइल प्रारूप) (जेएआर) की तुलना में आकार में कुछ प्रतिशत छोटी होती है।

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

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

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

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

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

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

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

लाइसेंसिंग और पेटेंट
इस प्रकार से डाल्विक को अपाचे लाइसेंस 2.0 की प्रतिबन्धों के अंतर्गत प्रकाशित किया गया है। कुछ कहते हैं कि डाल्विक मानक जावा अर्थगत के शीर्ष पर विकास के अतिरिक्त स्पष्ट कक्ष का डिज़ाइन कार्यान्वयन है, जिसका अर्थ यह होगा कि यह मानक-संस्करण या ओपन-सोर्स-संस्करण जावा अर्थगत से स्वत्वाधिकार-आधारित लाइसेंस प्रतिबंध प्राप्त नहीं करता है। अतः ओरेकल निगम और कुछ समीक्षक इस पर तर्क करते हैं।

इस प्रकार से 12 अगस्त 2010 को, ओरेकल निगम, जिसने अप्रैल 2009 में सन माइक्रोसिस्टम्स का अधिग्रहण किया था और इसलिए उसके निकट जावा के अधिकार हैं, उसने स्वत्वाधिकार और पेटेंट के कथित उल्लंघन पर गूगल पर प्रकरण दर्ज किया। अतः ओरेकल ने आरोप लगाया कि गूगल ने एंड्राइड विकसित करते समय विचार करके, प्रत्यक्षतः और बार-बार ओरेकल की जावा-संबंधित बौद्धिक संपदा का उल्लंघन किया।  मई 2012 में, इस स्थिति में जूरी ने पाया कि गूगल ने ओरेकल के पेटेंट का उल्लंघन नहीं किया है, और ट्रायल कोर्ट के न्यायाधीश ने निर्णय सुनाया कि गूगल द्वारा उपयोग की जाने वाली जावा एपीआई की संरचना स्वत्वाधिकार योग्य नहीं थी।  इस प्रकार से समूहों ने अनुकरण किए गए कोड की 9 पंक्तियों के लिए वैधानिक क्षति में शून्य डॉलर पर सहमत हुईं।

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

बाहरी संबंध

 * डाल्विक bytecode – official एंड्राइड documentation of the instruction set
 * Dex Executable format – official एंड्राइड documentation
 * , गूगल I/O 2010, by Ben Cheng and Bill Buzbee
 * डाल्विक वीएम Internals, गूगल I/O 2008, by Dan Bornstein
 * The $800 Million Dollar Question: What’s the Difference Between Trademark and Copyright?