javalogo Java se stala velmi oblíbeným jazykem. Je plně postavena na principech objektově orientovaného programování a svou jednoduchostí si získala srdce nejednoho developera. Objevuje se v mobilních zařízeních, na webových stránkách, v různých podnikových aplikacích a tak podobně. Jak je to ale s jejím uplatněním na desktopech?

Výhody javy

Asi největší výhodou javy je její přenositelnost. Pokud napíšete aplikaci v javě, spustíte ji potom na jakékoliv platformě, pro kterou bylo vytvořeno JVM (Java Virtual Machine). Díky tomu odpadají problémy s portováním pro jinou platformu. I když je třeba i C/C++ multiplatformní jazyk, javě se v tomhle ani zdaleka nevyrovná.

Vývoj aplikací je velmi rychlý, protože java už v základu obsahuje spoustu hotových řešení, které můžete při vývoji využít. Vy už se potom staráte jen o správný návrh aplikace, ty nízkoúrovňové záležitosti prostě neřešíte. Například díky garbage collectoru se nemusíte starat ani o správu paměti. Naproti tomu třeba v C/C++ si musíte pořádně hlídat každý paměťový prostor, který jste alokovali. Pokud byste ho potom správně nedealokovali, vznikl by tzv. memory leak, což je někdy taková noční můra všech programátorů. Zvlášť u velkých projektech se memory leaky hledají dost těžce a jejích oprava zabere spoustu času.

Druhá strana

Výhody jsou dost lákavé a svádějí člověka k dojmu, že java je nejlepší. To ale není pravda (menší odbočka: neexistuje nejlepší programovací jazyk, každý jazyk je vhodný na něco jiného).

Jako největší nevýhoda javy se uvádí její rychlost, tedy lépe řečeno pomalost. Proč jsou java aplikace vůbec pomalejší, než ty nativní, psané dejme tomu v C/C++? Pokud napíšete nějakou aplikaci, java přeloží zdrojový kód programu do tzv. byte-code. Tento byte-code je srozumitelný pro JVM, která ho poté interpretuje do podoby srozumitelné pro danou platformu.

Rychlost javy se ale stále zlepšuje a s rostoucím výkonem počítačů se tento nedostatek poměrně rychle vytrácí. Java aplikace teoreticky nebudou nikdy rychlejší něž aplikace, které byly staticky zkompilovány pro určitou platformu. Při dobrém návrhu se jim mohou rychlostně přiblížit, nebo dokonce i vyrovnat.

Další nevýhoda javy je paměťová náročnost. Například v C++ jste za správu paměti zodpovědní hlavně Vy. Když je program potom moc náročný na operační paměť, můžete za to ve většině případu Vy. V java aplikacích však za správu paměti zodpovídá garbage collector a Vy nemáte téměř žádné možnosti, jak ho ovlivnit. Správa paměti se stejně jako výkon java aplikací stále zlepšuje. Podstatnou nevýhodou je však nutnost spuštění celého běhového prostředí javy. U větších aplikací se tato nevýhoda vytrácí, ale u malých projektů je dost velká nevýhoda, že Váš malý prográmek zabírá v paměti více než 20MB. I přes dnešní ceny pamětí je to ale dost velká nevýhoda.

Pokud chcete vyvíjet aplikace v javě, musíte si shrnout všechny klady a zápory, a podle toho se potom rozhodnout, zda Vám to vyhovuje.

Problém s distribucí

Já však vidím největší problém javy někde jinde. Zkuste se zamyslet, kolik vůbec znáte java programů? Používáte nějaký? Já tedy ne a jedinou java aplikaci pro desktop, na kterou jsem kdy narazil byl program Rachota. Java sice nabízí relativně snadný způsob, jak distribuovat své aplikace. Můžete použít samospustitelné jar balíčky, na které stačí poklepat a ony se spustí.

Teoreticky to zní jednoduše, ale v praxi to tak snadno nefunguje. Zkuste si kupříkladu stáhnout zmíněný program Rachota. Je to jar soubor, zkuste na něj poklepat a spustit ho. Jde vám to?

Problémů je několik. Ke spuštění potřebujete Java Runtime Enviroment. Spustit můžete buď otevřením (klasickým dvojklikem na jar soubor), nebo z příkazové řádky pomocí příkazu java -jar nazevaplikace.jar .Pokud někdo nemá JRE, Váš program si prostě nespustí. Když potom bude chtít nějaký BFU Váš skvělý program zkusit a nebude mít JRE, pravděpodobně se na to vykašle. Proč by měl instalovat navíc ještě nějaký cizí program? Zkuste to takovým uživatelům nějak vysvětlit, není to nic snadného :)

Taky se může stát, že uživatel sice bude mít JRE v systému nainstalováno, ale bude mít špatnou asociaci souborů s příponou .jar. Třeba na bráchovém počítači se při poklepání na jar soubor otevře obsah archívu ve Winzipu. Takový člověk si zas pro změnu řekne, že sice nároky na spuštění programu splňuje, a přesto to nejde spustit. Tak se na to taky vykašle.

Jak to tedy vyřešit? Způsob může být třeba použití nějakého skriptu, který bude ve formě .bat souboru a jediné co provede bude volání java -jar z příkazové řádky. Další možnou variantou je spolu s programem distribuovat celé JRE. Už jsem to tak někde viděl, ale detailnější informace o tomto řešení zatím nemám. Bylo by to sice skvělé, protože by uživatel nemusel mít nic nainstalovano, ale datová náročnost by potom dost vzrostla. Malá, jednoduchá aplikace zabírající na disku několik desítek megabajtů nejspíše nebude budit v očích uživatele moc důvěry.

Nejlépší řešení je asi kompilace aplikace do nativního zdrojového kódu. Tím ale příjdete o onu úžasnou přenositelnost. Ke kompilaci můžete použít GCJ (GNU Compiler for the Java). Tuto možnost jsem zatím blíže nezkoumal, ale v budoucnu se tím budu zabývat trochu více do hloubky. Bude to nejspíše jedno z možných dalších témat zde na blogu.

Situace se zlepšuje, protože spoustu lidí má JRE už předinstalováno, nebo se jim nainstalovalo kvůli potřebě spouštět java aplikace v prohlížeči. Nicméně distribuce java aplikací je zatím stále složitější, než v případě nativních aplikací zkompilovaných pro danou platformu. Až se tato skutečnost vyřeší, bude podle mě vznikat mnohem více desktopových java aplikací.