Java zajmuje się zarówno kompilacją, jak i interpretacją,
W Javie programy nie są kompilowane do plików wykonywalnych ; są one kompilowane do kodu bajtowego (jak omówiono wcześniej), który JVM (wirtualna maszyna języka Java) interpretuje / wykonuje w czasie wykonywania. Kod źródłowy Java jest kompilowany do kodu bajtowego, gdy używamy kompilatora javac. Kod bajtowy zostanie zapisany na dysku z rozszerzeniem pliku .class .
Gdy program ma zostać uruchomiony, kod bajtowy jest konwertowany, a kod bajtowy może być konwertowany za pomocą kompilatora just-in-time (JIT). Rezultatem jest kod maszynowy, który jest następnie wprowadzany do pamięci i wykonywany.
Javac to kompilator języka Java, który kompiluje kod Java do kodu bajtowego. JVM to wirtualna maszyna Java, która uruchamia / interpretuje / tłumaczy kod bajtowy na natywny kod maszynowy. W Javie, chociaż jest uważany za język interpretowany, może używać kompilacji JIT (Just-in-Time), gdy kod bajtowy jest w JVM. Kompilator JIT odczytuje kody bajtowe w wielu sekcjach (lub w całości, rzadko) i kompiluje je dynamicznie do kodu maszynowego, dzięki czemu program może działać szybciej, a następnie buforowany i ponownie używany później bez konieczności ponownej kompilacji. Kompilacja JIT łączy więc szybkość kompilowanego kodu z elastycznością interpretacji.
Interpretowany język jest rodzajem języka programowania, dla którego większość implementacji bezpośredniego i swobodnego wykonywania instrukcji, bez uprzedniego kompilacji programu na instrukcje maszynowe językowych. Interpreter wykonuje program bezpośrednio, tłumacząc każdą instrukcję na sekwencję jednego lub więcej podprogramów już skompilowanych na kod maszynowy.
Skompilowany język jest językiem programowania, którego implementacje są zwykle kompilatory (tłumacze, które generują kod maszynowy z kodem źródłowym), a nie tłumaczy (krok po kroku wykonawcami kodu źródłowego, gdzie nie tłumaczenie pre-runtime odbywa)
We współczesnych implementacjach języków programowania, takich jak Java, coraz popularniejsze jest, aby platforma zapewniała obie opcje.