Multiplatformní nebude vždy horší než nativní. Pouze to bude vždy pomalejší. Vaše kritérium pro lepší-horší rozhodně nemusí být to pravé kritérium pro všechny. Osobně bych se také snažil vyhnout psaní velkých aplikací v Javě, ale je spousta míst, kde Java má (i podle mně - spíše javoskeptika) smysl.
Ono je toho víc i z "mimoprogramátorských" oblastí. Typické jsou různé opensource crossplatform utility pro různé specifické účely. Já třeba v oblasti modelařiny využívám OpenRocket pro analýzu modelu rakety, dále přes Java běží minimálně dva ze softů pro řídící jednotky multicopterů a to je jen to, co mě napadlo bezprostředně.
Pokud přeložíte z C/C++ slušně napsanej program, už nebude multiplatformní. Budete mít aplikaci pro zvolenou platformu a bude (při vhodně zvolených parametrech překladu) maximálně využívat danou architekturu. Java je multiplatformní z principu, je to (napůl) interpretovanej jazyk a proto z principu bude pomalejší. To neznamená, že je to nepužitelnej paskvil. Jen je to její vlastnost a při volbě jazyka pro projekt je třeba toto zohlednit (kompromis... něco za něco)
Tak jsem si dal tu práci a našel pár benchmarků. Ve většině vycházela java cca 1.5x - 3x pomalejší než C++, vyjímečně 10x pomalejší. Vyjímečně (právě pro krátký program) byla rychlejší. (Tipnul bych kvůli standardnímu nastavení překladače C++ kterej do toho zavlekl zbytečné knihovny - ale to je opravdu jen tip). Je možné, že ajdete i jiné výsledky. Ono zákleží i na typu aplikace, jak je psaná a na architektuře. Předpokládám, že na procesorech, které se chlubí nativní podporou javy, bude java excelovat
Aha, takže nemyslíte multiplatformní aplikace, ale aplikace, které jsou interpretované nebo běží pod nějakým virtuálním strojem. I pak ale žádný vámi popisovaný princip neexistuje. Ano, interpretovaná aplikace nebo aplikace pod VM nikdy nepoběží rychleji, než optimální nativní kód (protože ten nativní kód vždycky může dělat to samé, co ta VM). Ovšem to neznamená, že aplikace pod VM nemůže prakticky běžet stejně rychle, jako nativní aplikace (i když budou používat stejné algoritmy). Za prvé, to, zda je aplikace nativní nebo běží pod VM, ovlivňuje pouze (koho, co) rychlost zpracování na CPU – to je ale pro typické aplikace okrajová záležitost co se týká výkonu, protože aplikace pořád na něco čeká. Za druhé, VM může dělat to, že interpretovaný kód překládá na nativní, takže pokud už nějaká část aplikace bude drtit procesor, bude nejspíš přeložená do nativního kódu a tedy poběží stejně rychle, jako nativní kód. Nakonec díky tomu může aplikace pod VM někdy běžet i rychleji, než nativní kód – protože VM může kód zoptimalizovat přímo pro daný procesor, na kterém právě běží, a pro způsob, jakým se aplikace doopravdy používá. Naproti tomu nativní aplikaci budete mít typicky přeloženou obecně pro určitou rodinu procesorů, a typicky bude přeložena s optimalizacemi pouze na základě zdrojového kódu, bez optimalizací na základě údajů o běhu programu.
Mimochodem, zvolená platforma má na výslednou rychlost programu jen malý vliv. Obvykle dosáhnete mnohem většího zrychlení programu optimalizací kódu, než čeho by se dosáhlo změnou platformy.
... a bude dělat všechno proto, abyste něco takového už nikdy v životě v počítači nechtěli ...
Otázkou je, co vlastně nechci, zda Javu nebo crapware od ask.com. Někdy mám bohužel pocit, že oboje. Java byla super nápad, teď je to líný bumbrlíček, občas myslím, že ji snad i čeká osud flashe.
multiplatformne bude vzdy horsie ako nativne. Takze java je dobra na rychle spraskanie veci na zaciatok, resp. na projekty ktore nemaju na financovanie nativnych aplikacii. Ked uz sa robi nieco seriozne... ale ved vidiet to na klientskych aplikaciach ako Eclipse, Netbeans, ... ich rychlost/pomalost je do oci bijuca na akomkolvek hardware a pisat v nich je utrpenie. Nebyt androidu, dnes je java v ovela, ovela horsej pozicii. Ved aka ina vyznamna klientska aplikacia je v jave?
Aha, chapu, nekdo kdo netusi, ze C/C++ a C# je neco zcela jineho. Pochopitelne, ta mezivrstva ten beh urychluje, to zni logicky. A proto se herni servery pisou v jave ... a proto to presne podle toho vypada
Doporucuju kuprikladu porovnat, kolik toho unese minecraft, a jake naroky na HW ma, a kolik toho unese rekneme Mangos, coz je GPL server pro WOW. Rekneme pri 100 zaroven hrajicich lidech.
Stejne tak se v jave zcela bezne pisou renedery a dalsi nastroje pro grafiku/film, protoze rozdilu nekolika dnu pri vypoctu 10s videa si preci nikdo nevsimne.
Našel jsem jen jeden článek a tam byla Jva pomalejší jen extrémně krátký run. V těch delších takové rozdíly zdaleka nebyly...
Navíc porovnávat C a Javu je nemysl, protože se jaksi nekryje jejich spektrum použití. Když ale vezmeme C++ C# a Javu tak Java rozhodně výkonostně nezaostává ani za jedním.
"Aha, chapu, nekdo kdo netusi, ze C/C++ a C# je neco zcela jineho" jak jste to vydedukoval to absolutně nechápu... Pouze jsem uvedl 2 další jazyky, ve kterých se dělají front end aplikace, jejichž výpočetní výkon je naprosto srovnatelný a nikdo o nich neříká, že jsou pomalé.
Nicméně Mangos, který se hroutí jen při několika tisích připojených klientech asi není ten úplně nejlepší příklad výkonnosti a spolehlivosti. I když, tady to bude spíš otázka nedokonalosti implementace.
Co se posledního odstavce týká, tak samozřejmě ono by to šlo udělat, tak aby to bylo rychlé (s použitím JNI a napojení na grafickou kartu), ale vzhledem k absenci slušnějšího frameworku pro tvorbu gui se s tím logicky nikomu nechce moc párat.