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