Just-in-time fordítás
A Wikipédiából, a szabad lexikonból.
A Just-in-time fordítás (just-in-time compilation, JIT), ami futás idejű fordításként vagy dinamikus fordításként (dynamic translation) is ismert, a bájtkód-fordított rendszerek teljesítményének növelésére szolgáló technika. A bájtkódot futási időben fordítja natív kódra. A JITteléshez két korábbi futtató környezet adta az ötletet: a bájtkód fordítás (bytecode compilation) és a dinamikus fordítás (dynamic compilation).
Egy bájtkód-fordított rendszerben (ilyen a Perl, a .NET nyelvek, a GNU CLISP, a Java korai verziói) a forráskódot egy köztes kódba fordítják, amit bájtkódnak neveznek. A bájtkód nem gépi kód egy adott processzorra, így hordozható a különböző számítógép-architektúrák között. A bájtkódot aztán értelmezik vagy egy virtuális gépen futtatják.
A dinamikus fordító környezetben a fordító futás közben végzi feladatát. Például a legtöbb Common Lisp rendszer rendelkezik egy compile
függvénnyel, ami képes a futás közben keletkezett új függvények lefordítására. Az előnye az interaktív hibakeresés, viszont ez az előny kész rendszerek esetén nem túl hasznos.
Egy JIT környezetben a bájtkód fordítás az első lépés, azaz a forráskód hordozható és optimalizálható köztes reprezentációra konvertálása. A bájtkódot telepítik a célrendszerre. A kód végrehajtása során a futtatókörnyezet fordítója fordítja azt natív gépi kódra. Ezt meg lehet fájl vagy függvény alapon tenni: a függvényeket akkor szükséges csak lefordítani, amikor végrehajtásra kerülnek (innen jön a "just-in-time", éppen időben kifejezés).
A cél a natív és a bájtkód fordítás előnyeinek egyesítése. Az eredeti forrsákód feldolgozása és az alapvető optimalizálás fordítási időben történik, jóval a futtatás előtt -- a bájtkódról gépi kódra történő fordítás jóval gyorsabb, mint forráskódról. A keletkezett bájtkód hordozható, nem úgy, mint az architektúrához kötött gépi kód. A bájtkódról gépi kódra fordítók megírása is egyszerűbb, mivel a bájtkód fordító elvégzi a munka nehezét.
[szerkesztés] Történelem
A dinamikus fordítás úttörője egy kereskedelmi Smalltalk implementáció volt a '80-a évek elején, ami ma VisualWorks néven ismert.
A Sun HotSpot Java virtuális gép implementációja a sikeres JIT implementáció egy példája. Két részből áll:
- * egy "kliens" fordító, ami gyors fordítási sebességet biztosít a rövid életű alkalmazások számára,
- * egy "szerver" fordítót, ami erősen optimalizált kódot állít elő hosszú életű alkalmazások számára.
A felhasználó választhat a dinamikus fordítók közül az alkalmazás karakterisztikájának megfelelően.
A Microsoft is egy JIT-alapú rendszert választott a .NET környezet számára, valamint a Crusoe processzor is hasonló módszert használ hardver szinten. A Parrot virtuális gép is JIT-et használ. A Psycho egy Python JIT fordító.