Java melakukan kompilasi dan interpretasi,
Di Jawa, program tidak dikompilasi menjadi file yang dapat dieksekusi ; mereka dikompilasi menjadi bytecode (seperti yang dibahas sebelumnya), yang kemudian ditafsirkan oleh JVM (Java Virtual Machine) / dijalankan pada saat runtime. Kode sumber Java dikompilasi menjadi bytecode ketika kita menggunakan kompiler javac. Bytecode akan disimpan di disk dengan ekstensi file .class .
Ketika program dijalankan, bytecode dikonversi , bytecode dapat dikonversi, menggunakan kompilator just-in-time (JIT). Hasilnya adalah kode mesin yang kemudian diumpankan ke memori dan dieksekusi.
Javac adalah Java Compiler yang mengkompilasi kode Java ke Bytecode. JVM adalah Java Virtual Machine yang Menjalankan / Menafsirkan / menerjemahkan Bytecode ke Kode Mesin Asli. Di Jawa meskipun dianggap sebagai bahasa yang ditafsirkan, itu dapat menggunakan kompilasi JIT (Just-in-Time) ketika bytecode berada di JVM. Kompiler JIT membaca bytecode di banyak bagian (atau secara penuh, jarang) dan mengkompilasinya secara dinamis ke dalam kode mesin sehingga program dapat berjalan lebih cepat, dan kemudian di-cache dan digunakan kembali nanti tanpa perlu dikompilasi ulang. Jadi kompilasi JIT menggabungkan kecepatan kode yang dikompilasi dengan fleksibilitas interpretasi.
Sebuah bahasa ditafsirkan adalah jenis bahasa pemrograman yang sebagian besar implementasi yang mengeksekusi instruksi langsung dan bebas, tanpa sebelumnya kompilasi program ke instruksi mesin-bahasa. Penerjemah mengeksekusi program secara langsung, menerjemahkan setiap pernyataan ke dalam urutan satu atau lebih subrutin yang telah dikompilasi ke dalam kode mesin.
Sebuah bahasa yang dikompilasi adalah bahasa pemrograman yang implementasi biasanya compiler (penerjemah yang menghasilkan kode mesin dari kode sumber), dan tidak juru (langkah-demi-langkah pelaksana kode sumber, di mana tidak ada terjemahan pra-runtime terjadi)
Dalam implementasi bahasa pemrograman modern seperti di Jawa, platform semakin populer untuk menyediakan kedua opsi.