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