Java кодът обикновено се разпространява като байт код, който е машинно независим псевдокод. (Същата идея беше използвана преди в UCSD-p система, разработена през 70-те години.) Предимството на това е, че едно и също приложение може да се изпълнява в различни процесори и операционни системи. В допълнение, байт кодът често е по-малък от компилираното приложение.
Недостатъкът е, че интерпретирането на кода е бавно в сравнение с изпълнението на компилиран код. За решаването на този проблем е разработен JIT компилатор. JIT компилаторът компилира кода в машинен код точно преди кодът да бъде изпълнен. Това ускорява изпълнението в сравнение с интерпретатора, но се отделя допълнително време за компилиране всеки път, когато програмата се изпълнява. В допълнение, тъй като JIT компилаторът трябва да компилира бързо, той не може да използва сложни техники за оптимизация, които се използват в статичните компилатори.
Друг подход е HotSpot компилирането. Първоначално работи като интерпретатор, но след това открива кои процедури се използват най-често и компилира само тях. Предимството е, че няма първоначално забавяне поради компилирането. Освен това компилаторът на HotSpot може да направи профилиране по време на изпълнението и след това да издаде по-силна оптимизация за най-важните рутинни процедури. Може дори да събира информация, така че когато стартирате едно и също приложение отново и отново, то да работи все по-бързо и по-бързо. Повече информация за HotSpot компилирането може да бъде намерена от тази статия (tnx Pangea за линка).
Разбира се, вместо да използвате JIT компилатор, можете просто да използвате статичен компилатор, за да компилирате байт кода за вашата машина. Това позволява пълна оптимизация и след това не е необходимо да компилирате отново всеки път, когато стартирате приложението. В телефони и уеб страници обаче често просто изпълнявате кода (или аплета) веднъж, така че JIT компилаторът може да е по-добър избор.
Актуализация
Файловете с байт код на Python имат разширение .py. Когато изпълните файла с байт код, компилаторът JIT на Python създава компилиран файл .pyc. Следващият път, когато стартирате същата програма, ако .py файлът не се е променил, няма нужда да го компилира отново, но вместо това Python изпълнява предишния компилиран .pyc файл. Това ускорява стартирането на програмата.
person
PauliL
schedule
25.05.2010