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

Dalvik Virtual Machine (DVM)
Dalvik Virtual Machine, Java Virtual Machine का एक संस्करण है जो कम शक्ति वाले हैंडहेल्ड उपकरणों यानी मोबाइल उपकरणों के लिए अनुकूलित है। DVM मोबाइल सिस्टम को बैटरी लाइफ, मेमोरी और सामान्य प्रदर्शन के लिए अनुकूलित करता है।
Android के लिए अभिप्रेत प्रोग्राम पहले Java में लिखे जाते हैं और फिर JVM के लिए बाइटकोड में कंपाइल किए जाते हैं। उसके बाद, इस बाइटकोड को Dalvik बाइटकोड में अनुवादित किया जाता है और .dex और .odex फाइलों में स्टोर किया जाता है। ये क्रमशः Dalvik एक्जीक्यूटेबल और ऑप्टिमाइज़्ड Dalvik एक्जीक्यूटेबल फाइलें हैं।

JVM vs DVM - विस्तृत तुलना
| विशेषता | JVM (Standard) | DVM (Dalvik) |
|---|---|---|
| लक्ष्य प्लेटफॉर्म | डेस्कटॉप, सर्वर, एम्बेडेड | मोबाइल (Android) |
| बाइटकोड फॉर्मेट | .class फाइल्स (स्टैक-आधारित) | .dex फाइल्स (रजिस्टर-आधारित) |
| रजिस्टर vs स्टैक | स्टैक-आधारित आर्किटेक्चर | रजिस्टर-आधारित आर्किटेक्चर |
| मेमोरी फुटप्रिंट | बड़ा | छोटा, अनुकूलित |
| बैटरी ऑप्टिमाइजेशन | नहीं | हां (मोबाइल के लिए महत्वपूर्ण) |
| कंपाइलेशन | JIT (रनटाइम) | AOT (इंस्टॉल टाइम) + JIT |
| प्रोसेस आइसोलेशन | प्रत्येक ऐप अलग JVM (भारी) | प्रत्येक ऐप अलग DVM प्रोसेस (हल्का) |
| गार्बेज कलेक्शन | जनरेशनल, एडवांस्ड | सरल, कॉम्पैक्टिंग |
बाइटकोड रूपांतरण प्रक्रिया
Java Source (.java)
│
▼ javac
Java Bytecode (.class) ──► dx tool ──► Dalvik Bytecode (.dex)
│ │
│ ▼
│ .odex (Optimized)
│ │
▼ ▼
Standard JVM DVM/ART
Android Runtime Evolution
| Android वर्जन | रनटाइम | विवरण |
|---|---|---|
| Android 1.0 - 4.4 (KitKat) | Dalvik (DVM) | JIT कंपाइलेशन, इंटरप्रेटर |
| Android 4.4 (KitKat) | ART (विकल्प) | AOT कंपाइलेशन पेश किया गया |
| Android 5.0 (Lollipop) - 6.0 | ART | डिफ़ॉल्ट रनटाइम, AOT कंपाइलेशन |
| Android 7.0 (Nougat)+ | ART | JIT + AOT हाइब्रिड, प्रोफाइल-गाइडेड |
| Android 10+ | ART | और अनुकूलन, मॉड्यूलर |