Hlavní navigace

Používáme Javu na Linuxu, kompilujeme

binary runner

V dnešním dílu našeho volného seriálu o Javě na Linuxu se podíváme na dva nástroje pro kompilaci Javy. V jednom případě půjde o kompilátor Javy do bytecodu a v druhém o kompilaci do nativního kódu.

Jikes

Pokud jste pracovali s překladačem javac ze Sun JDK, pravděpodobně jste byli dříve či později rozladěni jeho rychlostí. Důvodem je, že sám překladač je napsaný v Javě, což sice eliminuje potřebu jeho portace, ale překladu to na rychlosti nepřidá – natažení JVM, natažení a instanciace tříd,interpretace, to vše něco stojí.

Náplastí na tyto bolístky je populární kompilátor Javy Jikes. Oblíbenost tohoto kompilátoru má dva důvody – rychlost a striktní dodržování standardů. Vysoká rychlost je výsledkem implementace kompilátoru v C++, vestavěné analýzy závislostí a inkrementální kompilace.

Vzhledem k tomu, že je Jikes šířen pod IBM Public License, můžete se s ním setkat i ve volně šiřitelných verzích distribucí. Pokud si chcete práci s Jikesem usnadnit a nastavili jste si proměnné prostředí podle předchozího dílu seriálu, můžete si přidáním aliasu do .bash_profile, případně /etc/profile, ušetřit práci při psaní příkazů a umožnit hladší spolupráci Jikesu s JDK: alias jikes="jikes -bootclasspath $BOOTSTRAP_CLASSPATH -extdirs $EXTENSION_CLASSPATH".

Jikes je i zajímavý pro pokročilejší Java programátory, zabývající se psaním Java Server Pages (JSP) pod Servlet/JSP containerem Tomcat z projektu Jakarta. Jikes totiž může být s výhodou použit jeho součástí, JSP kompilátorem Jasper. Stačí jen změnit nastavení proměnné _RUNJAVA v souboru setclasspath.sh obdobně jako v předchozím případě na: _RUNJAVA=jikes -bootclasspath $BOOTSTRAP_CLASSPATH -extdirs $EXTENSION_CLASSPATH. Pokud jste instalovali Tomcat z RPM balíku, najdete ho v adresáři /var/tomcat4/bin.

GCJ

Projekt GCJ vznikl jako součást projektu GNU GCC a je tedy součástí každé novější distribuce. Nabízí atraktivní možnost kompilace Javy do nativního kódu hostitelské platformy. Atraktivita tohoto přístupu spočívá v rychlejším spouštění aplikací z důvodu absence potřeby zavádět do paměti JVM, svou roli hraje i značný nárůst výkonu aplikace získaný odbouráním režie JVM a další optimalizací na úrovni assembleru. Poměrně uspokojivá je i stále se rozrůstající řada portů, v současnosti zahrnující IA-32, IA-64, Sparc Solaris, Tru64 Unix, Alpha a PowerPC Linux.

GCJ pro svou práci využívá dvě sdílené knihovny, libgcj a libgcjgc. Knihovna libgcjgc obsahuje garbage collector, tj. automatické uvolňování objektů, na které se už nikdo neodkazuje. V distribuce Mandrake je knihovna libgcjgc obsažena v balíku libgcj2.96, balík libgcj3.0-devel obsahuje pouze symbolický odkaz na ni.

O něco zajímavější je knihovna libgcj obsahující nativní implementace základních aplikačních rozhraní Javy. Její vývoj postupuje rychle, a tak se snad v dohledné době dočkáme možnosti spolehlivě kompilovat Javové programy do nativního kódu. Experimentováním s verzí z GCC 3.0.4 lze snadno narazit na to, že GCJ nezná definici třídy, případně se přeložený program chová trochu jinak než původní. Nová verze z GCC 3.1 přináší podporu Unicode 3.0, některá nová zlepšení výkonosti, pokroky v portaci na další platformy (např. Windows) a lepší interakci s C/C++. Výrazným pokrokem jsou i nově zahrnutá podpora API Remote Method Invocation (RMI), java.lang.ref.*, javax.naming, javax.transaction, org.w3c.dom a org.xml.sax. Změn je samozřejmě víc, zájemce o podrobnější informace odkazuji na oficiální seznam změn v GCC 3.1. Licence libgcj je GPL s výjimkou, že připojení (linking) libgcj nevyžaduje, aby výsledný program byl také pod GPL.

Kompilovat můžete buď zdojový kód v Javě (.java), nebo bytecode (.class). Ke kompilaci ze zdrojového kódu přitom nepotřebujete JDK ani při ní nevzniká bytecode a v obou případech příkaz pro kompilaci vypadá podobně: gcj --main=<main_class> -o <output_file> <source_files>, kde za --main je název třídy obsahující metodu main a <source_files> seznam souborů obsahujících zdrojový kód v Javě nebo přeložené (do bytecodu) třídy. Vlastní překlad pak probíhá ve třech krocích:

  1. převod zdrojového kódu nebo bytecodu do assembleru
  2. kompilace assembleru
  3. slinkování s libgcj

Samotné GCJ může být doprovázeno sadou několika utilit zvanou GCJ Tools. Běžně použitelná je zřejmě pouze utilita jv-scan, která umí vypsat všechny třídy v daném zdrojovém souboru a může posloužit i k vyhledání třídy obsahující metodu main. Dále zde najdete interpret bytecodu gij, gcjh generátor C++ hlaviček pro .class soubory a program jcf-dump vypisující z nich užitečné informace.

příště: ant

Našli jste v článku chybu?

1. 7. 2002 8:47

Dalibor (neregistrovaný)

Už se těším až v některém z příštích dílů dáte pár typů na nějaký dobrý (třeba i jednoduchý) editor. Nejraději bych něco jako JCreator, který je bohužel jen pro Win.

26. 6. 2002 13:38

fidlej (neregistrovaný)

Diky za ten jikes. Hned jsem si nastvil vimrc:

au FileType java set makeprg=jikes\ +E\ -Xstdout\ %\ -bootclasspath\ $BOOTSTRAP_CLASSPATH\ -extdirs\ $EXTENSION_CLASSPATH
au FileType java set efm=%f:%l:%v:%*\\d:%*\\d:%*\\s%m




Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

DigiZone.cz: TV Philips a Android verze 6.0

TV Philips a Android verze 6.0

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Měšec.cz: Jak levně odeslat balík přímo z domu?

Jak levně odeslat balík přímo z domu?

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech