जावा संकलन और व्याख्या दोनों करता है,
जावा में, प्रोग्राम निष्पादन योग्य फ़ाइलों में संकलित नहीं किए जाते हैं ; वे बायटेकोड में संकलित हैं (जैसा कि पहले चर्चा की गई है), जो JVM (जावा वर्चुअल मशीन) तब रनटाइम पर व्याख्या / निष्पादित करता है। जावा सोर्स कोड को बायटेकोड में संकलित किया जाता है जब हम javac संकलक का उपयोग करते हैं। फ़ाइल एक्सटेंशन .class के साथ डिस्क पर बाईटकोड सहेजा जाता है ।
जब प्रोग्राम को चलाया जाना है, तो बायटेकोड को कन्वर्ट किया जाता है , सिर्फ-इन-टाइम (JIT) कंपाइलर का उपयोग करके बायटेकोड को परिवर्तित किया जा सकता है। परिणाम मशीन कोड है जिसे फिर मेमोरी में फीड किया जाता है और निष्पादित किया जाता है।
Javac है जावा संकलक जो बाईटकोड में संकलन जावा कोड। JVM जावा वर्चुअल मशीन है, जो बायोटेक को मूल मशीन कोड में चलाता है / व्याख्या करता है / अनुवाद करता है। जावा में हालांकि इसे एक व्याख्या की गई भाषा के रूप में माना जाता है, यह JIT में बायोटेक होने पर JIT (जस्ट-इन-टाइम) संकलन का उपयोग कर सकता है। JIT कंपाइलर कई खंडों (या पूर्ण रूप से, शायद ही कभी) में बायटेकोड्स को पढ़ता है और उन्हें गतिशील रूप से मशीन कोड में संकलित करता है ताकि प्रोग्राम तेजी से चल सके, और बाद में कैश किए गए और पुन: उपयोग किए बिना पुन: उपयोग किया जा सके। तो जेआईटी संकलन व्याख्या के लचीलेपन के साथ संकलित कोड की गति को जोड़ती है।
एक व्याख्या की गई भाषा एक प्रकार की प्रोग्रामिंग भाषा है, जिसके लिए इसके अधिकांश कार्यान्वयन सीधे-सीधे और स्वतंत्र रूप से निर्देशों को निष्पादित करते हैं, पहले से ही मशीन-भाषा के निर्देशों में एक कार्यक्रम को संकलित किए बिना। दुभाषिया सीधे प्रोग्राम को निष्पादित करता है, प्रत्येक कथन को एक या अधिक सबरूटीन्स के अनुक्रम में पहले से ही मशीन कोड में संकलित करता है।
एक संकलित भाषा एक प्रोग्रामिंग भाषा जिसका कार्यान्वयन आमतौर पर compilers (अनुवादकों कि स्रोत कोड से मशीन कोड उत्पन्न), और दुभाषियों नहीं हैं (चरण-दर-चरण स्रोत कोड के निष्पादकों, जहां कोई पूर्व क्रम अनुवाद जगह लेता है) है
जावा की तरह आधुनिक प्रोग्रामिंग भाषा कार्यान्वयन में, यह दोनों विकल्पों को प्रदान करने के लिए एक मंच के लिए तेजी से लोकप्रिय है।