Java: kompilace do nativniho kodu platformy

Programy v Jave, se na rozdil treba od C nekompiluji primo do nativniho kodu dane platformy, ale do bajt kodu (mezikodu). To muze velka (ne)vyhoda. zalezi na uhlu pohledu. Aplikace je pak multiplatformni, jde spustit na vsech OS, na ktere je portovana Java. Nevyhodnou je mozna trochu mensi rychlost (tohle tema nemam rad ;-)) a relativne snadna moznost dekompilovat zkompilovane class soubory. Malo se to vi a jeste min pouziva, ale i Java se do zkompilovat primo do nativniho kodu.

Nechce se mi psat o teorie, te je plny web. Takze kratce: zdrojak v Jave jde opravdu zkompilovat do nativni binarky. Na Windows se to casto resi pribalenim JRE (Java Runtime Environment) k JAR souboru s aplikaci. Cela obludnost ma pak minimalne 100MB. Navic je tam JRE navzdy neaktualizovane.

Pravdepodobne nejlepsi na kompilaci do nativniho kodu je komercni nastroj Excelsior JET, bohuzel jsem ho vsak nevyzkousel.

Otevrenou alternativou (no dobra, alternativa je mozna silne slovo) je GCJ (GNU ClassPath). Projekt je aktualne asi v mrtve fazi a nic se v nem nedeje. Podle oficialniho webu je podpora na urovni „It has been merged with GNU Classpath and supports most of the 1.4 libraries plus some 1.5 additions.“. Takze skoro cela Java 1.4 a cast Javy 1.5.

Jen pro upresneni, Java 1.4 je z roku 2002 a 1.5 (Java 5.0) z roku 2004. Podpora AWT a Swingu je takova…pochybna, skoro zadna…

Dalsi mytus: vysledna binarka bude obludne velka. V pripade GCJ to u „Hello, world“ neplatilo. Zkouset cokoliv dalsiho jsem povazoval za plytvani casem. GCJ jsem zkousel z jedineho duvodu – dokazit si, ze to jde 🙂

Protoze jsem mel u testovani spustenych X dalsich programu, jsou casy pouze orientacni. Je tak videt, ze vysledna binarka i kompilace trva u Oracle Javy i GCJ +- stejne dlouho.

Na uvod pouzite verze Javy. Pracoval jsem na Linux Mint 16 (Ubuntu 13.10):

########### Verze Javy: Oracle Java 8 64bit; gcc (gcj) 4.8.1 64bit

Ukazkovy „Hello, world“ program:

Velikosti souboru pred kompilaci:

Kompilace pomoci Oracle Javy a GCJ:

Velikosti vystupnich souboru:

Velikosti vystupnich souboru po stripu GCJ binarky:

Informace o zkompilovanych souborech:

Porovnani rychlosti provedeni programu z Oracle Javy a GCJ binarky:

Zaver o (ne)pouzitelnosti si kazdy musi udelat sam. Muj test nema prilis velkou vypovidaci hodnotu, na to jsem testoval malo veci. Chtelo by to slozitejsi program. Ale jak rikam, jen jsem si chtel na TODO listu odskrtnout „vytvorit Java ELF binarku“ a to se povedlo.

Mate-li s GCJ nejake blizsi zkusenosti, podelte se prosim v diskuzi pod clankem.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *