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