kompilacja statyczna jest procesem konwertowania kodu zrodłowego na kod pośredni.
Kod pośredni (B-kod) podczas uruchomienia aplikacji jest konwertowany na kod maszynowy. Do tego celu służą różne techniki. Jedną z nich jest interpretowanie, które polega na cyklicznym pobieraniu instrukcji języka, tłumaczeniu ich na kod maszynowy, generacji i wykonywaniu. Przykładowymi interpreterami są powłoki (ang. Shell) systemów operacyjnych przykładem, których są DOS, bash, csh. Największą wada interpretowanie jest jednak to, że nie można wykonać optymalizacji kodu maszynowego, gdyż nie jest on dostępny.
Jeżeli chodzi o Javę interpretowanie kodu wygląda jednak trochę inaczej. Związane jest to z jedną z głównych cech, która była jednym z powodów jej stworzenia. Mowa oczywiście o przenośności kodu. Założenie, że kod może być uruchamiany na każdej platformie sprzętowej spowodowało konieczność stworzenia takich interpretatorów, które umożliwiałyby efektywną konwersję tego samego kodu źródłowego na kod wykonywujący się tak samo na rożnych platformach sprzętowych. Proces interpretacji zajmuje stosunkowo bardzo dużo czasu, dlatego konieczne były pewne modyfikacje przyśpieszające go, aby uruchamiany program był odpowiednio efektywny. Zabiegi te znacznie poprawiły wydajność programów napisanych w Javie. Proces ten przebiega dwuetapowo. Pierwszym etapem opisanym wyżej jest kompilacja kodu źródłowego na kod pośredniego, który nosi również nazwę kodu maszyny wirtualnej. Kod pośredni jest efektem translacji kodu źródłowego zgodnie z architekturą języka Java. W wyniku translacji powstaje zestaw bajtów, który przed uruchomieniem musi być prze konwertowany na kod maszynowy zgodny z architekturą platformy sprzętowej, na której jest uruchamiany. W języku używanym przez programistów zestaw bajtów jest również nazywany Beta-kodem lub B-kodem. Kod wynikowy konkretnej platformy powstaje w wyniku interpretowania Beta-kodu przez interpreter maszyny wirtualnej.
Potrzeba jeszcze większego przyśpieszenia procesu kompilacji spowodowała, że zamiast interpretatora B-kodu opracowano różne kompilatory dynamiczne. Ich działanie oparte jest na kompilacji w locie B-kodu do kodu wykonywalnego dla danej maszyny. Otrzymany w ten sposób kod wykonywalny
17