Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Lacces
    őstag

    Köszi szépen, most már érthetőbb. Tehát a JIT az első fordítás után csak akkor lép ténylegesen működésbe mégegyszer, ha olyan forráskódot észlel, ami még nem volt gépi kódra fordítva. Vagyis 'épp akkor' lép életbe, amikor kell.

    Hát őh, én úgy olvasom, hogy van a Fordító a (Javac) ami a forrásfájlt bytecode-ra fordítja. Ez tiszta.
    Aztán van a JIT ami egyszer biztosan lefordít mindent! Bytecodra - natív gép kódra fordít.

    Szal a Javac forrásfájt -> bytecode-ra
    és a JIT bytecoderól -> gép kódra

    A JIT elvégzi ezt egyszer. De ha mondjuk a forrásfájlon változtatsz, például az egyik függvényt módosítod a forrásfájlban, akkor a JIT csak azt a függvényhez tartozó bytecode-t fordítja le! És nem az egész .class fájlt.
    (Több helyen többféleképpen magyarazák, én ilyesmit olvasok ki és akkor így a wikipédiás rész is szerintem érthetőbb, mert ott írja, hogy a C/C++ esetén minden egyes fájl újra fordítja, ha van valami változás, még a JIT csak ott, ahol történik, és nem minden egyes fájlt fordít újra)
    Meg ha portolod az alkalmazást, egyszer Linuxon máskor Windowson... akkor biztosan lefut, de csak bytecode-ról gépikódra (Javac mégegyszer nem fut le).

    De ha például én csak az Autó osztályban módosítom a függvényeket, plusz függvényt adok hozzá, akkor a JIT csak ezt az osztályt fordítja le ismét. A motor vagy teherautó osztályt békén hagyja, azt nem fordítja le mégegyszer, mert minek? Abban módosítás nem történt, a bytecode-ja ugyanúgy nézz ki.
    Szerintem inkább ez a lényeg.

    Szóval igen, az amit te mondtál. De én így tudom elképzelni a folyamatot.

    Meg ez .NET is így van, ugyanezt az elvet használja fel és elsőfordításkor minden lassú, még Java-ban is de utána, már nem, érezhetően gyorsabb :)

Új hozzászólás Aktív témák