JIT

A HupWiki-ből...

JIT azaz Just-In-Time

A processzor emuláció egy fajtája. Nevezik még dinamikus emulációnak is. Szemben a statikus vagy interpretív emulációval, a dinamikus emuláció inkább egy fordítóhoz hasonlít, amely az emulálni kívánt kódot a célprocesszor nyelvére fordítja le, majd e fordítás eredményét eltárolja egy bufferben. Igy a gyakran ismételt kódrészletek (pl. ciklusok) nem kerülnek ismételt fordításra, hanem azonnal végrehajthatók a bufferből. Ez jelentősen megnöveli a végrehajtás sebességét. Bizonyos esetekben az emulált kód akár gyorsabban is futhat mint az adott CPU-ra natívan fordított kód, hiszen az emulátor kódfordítás közben olyan optimalizációkat is elvégezhet, amely egy hagyományos fordítóprogram esetében igen nehéz megvalósítani. Átlagos esetben egy jól megírt dinamikus emulátorban futó program a natív programokhoz képest 60-80% sebességet ér el, míg a statikus emuláció legfeljebb ennek töredékére képes. Természetesen ez az érték függ az emulálni kívánt és a célprocesszor lehetőségeitől, bonyolultságától is.

Hátránya, hogy míg a statikus emulációt lehet célprocesszortól függetlenre írni, a dinamikus emuláció mindíg függ a célprocesszor nyelvétől, hiszen attól függően kell mást és más bináris kódot fordítania.

Dinamikus emulációt használ többek között a klasszikus Mac OS PowerPC-n az M68K processzorral szerelt gépekre készült szoftverek futtatására, ilyen emulációt használ az UAE nevű Amiga emulátor és a PowerPC-s Amigás rendszerek pl. a MorphOS, de hasonló dinamikus kódfordító dolgozik például a Java és a C# virtuális környezete alatt, amely azok bytekódját fordítja a célprocesszor nyelvére. Az Intel szintén hasonló technológiát használ, hogy az x86 programok futhassanak Itaniumon.

A dinamikus emulátorokat legtöbbször egy statikus emulátorral párhuzamosan használják. A statikus emulátor általában akkor lép működésbe, amikor a dinamikus emulátor nehezen, vagy nem fordítható kóddal találkozik (pl. önmódosító kód).