Keresés

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

  • DarkByte

    addikt

    válasz direwolf #5985 üzenetére

    Tud akár egyetlen binárisként is menni, nézz rá a GraalVM-re. :)
    Vagy nézd meg a Java Card platformot (kb. az összes SIM kárty, bankkártya, e-személyi alapja), az is egy Java-ból fordított natív kód.

    De a "normál" JVM ami a saját kis runtime-jával jön is ezt csinálja, csak te nem látsz exe-t, de a VM előfordítja memóriába (disk cache-be) x86 vagy ARM kódra az egész bytecode-ot és utána kezdi futtatni.

    A bytekódra tekints úgy mint egy absztrakció. Nagyon bután lehet interpreter-es módon is futtatni úgy hogy emulálod azt a virtuális processzort amire definiálva van, meg úgy is hogy előfordítod az egészet a cél platformra architektúrájára. Minden modern JVM utóbbit csinálja, a VM rész az elnevezésben félrevisz. Az interpreter-es megoldás az a hőskor. Lásd.

    A JRE része a standard Java kód library-k. Ezek szintén natív kódban vannak megvalósítva és ezért is kell platformtól függően más JRE-t telepítened. Ez köti össze a Java programot univerzálisan az OS-el. De ez pont olyan absztrakcióként működik mint egy OpenGL vagy Vulkan, vagy SDL2.

    Az Android féle JVM amúgy speciális, a bytekód nem kompatibilis az asztali Java-val, saját Dalvik VM-jük futtatja a dex fájlokat. De Android 5 óta ez is telepítési időben átforgatja natív kódra a bytekódot, ahogy a linkelt StackOverflow válasz is írja.

    A Java ettől még nem állítom hogy nem lesz valamivel lassabb lesz mint a natív, szimplán az absztrakció okán, a hordozhatóságnak van költsége. De közel sem annyira már mint a régmúltbeli beidegződések sejtetik.

    [ Szerkesztve ]

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