Portál AbcLinuxu, 12. května 2025 00:02
Jason LaDere vytvořil funkční základ portu 3D modelovacího programu Blender do jazyka Java. Podporovány jsou souborové operace, manipulace s uživatelským rozhraním, renderování a základní editace modelu.
Tiskni
Sdílej:
Nerekl bych "jezisi" ale "dekuji za praci". Nerekl bych "musi byt pomale" dokud nevyzkousim sam
;)
Proboha kde se lihnete? Zjisti si nejaka fakta o rychlosti Javy.
To je jednoduché. Každý, kdo trošku přičuchnul k programování, se dostal i k Javě. Ale každý na to nemá. Java API je docela rozsáhlé. Metodiku a další postuláty okolo Javy člověk musí přijmout. A že nejsou špatný.
No — a přesně ti, kteří tohle nepobrali, z nich se líhnou tyto existence.
Zkusil bych nejakou novejsi verzi. Me prijde, ze se porad zrychluje.
A taky bych uvítal rychlé GUI, to je hlavní problém java aplikací.A ja take, co neni implicitne hnusne. Ale QTJambi to ciastocne zachranuje.
Zkus to pustit se server hotspotem. Ano — prvních pár kliků bude utrpením oproti Client HostSpot, ale pak to nabere takový rychlosti, že si tvá videa budeš moci strčit mezi půlky. Osobně vyzkoušeno a provozováno na velmi slabém stroji.
I kdyby nebylo pomale (jako ze to nemuzeme posoudit, protoze nemame jeho implementaci v C++), webove aplikace jsou specialni pripad, protoze jsou (IMHO) pomerne snadnou JIT kompilovatelne. V zasade, ve webovych aplikacich se pousti neustale ten stejny kod se stejnymi parametry (protoze se vytvari stale tataz stranka). Tam uznavam, ze Java muze byt nekolikanasobne rychlejsi nez i C (ovsem je otazka, zda to tak bude, pokud styl programovani v Jave napr. vychvaluje ignorovani spravy pameti od programatora).
Ale na aplikaci typu Blender? Ten dukaz, ze tam JIT bude rychlejsi, chci videt!
jako ze to nemuzeme posoudit, protoze nemame jeho implementaci v C++To je aspirace na perlu týdne?
Ale na aplikaci typu Blender? Ten dukaz, ze tam JIT bude rychlejsi, chci videt!Aplikace typu Blender podle mne také vykonává neustále dokola ten samý kód. Přičemž JIT má tu výhodu, že může optimalizovat na instrukční sadu konkrétního stroje a dokonce i na konkrétní zpracovávaná data. To jde samozřejmě naprogramovat i v čemkoli jiném (přinejhorším si vždy můžete naprogramovat JIT). Každopádně je ta debata o rychlosti nesmyslná. Buď je to neúnosně pomalé, pak by to autor asi nezveřejňoval a jenom by oznámil, že to zkusil a bylo to pomalé. Nebo je rychlost dostačující, a pak je zbytečné se tím zabývat. Těch pár lidí, kterým opravdu na rychlosti záleží, pak budou dál používat C Blender pod Gentoo.
Nemuzeme to posoudit, protoze nemame nic, s cim bychom to mohli porovnat. Samozrejme, ja bych server typu ABCLinuxu psal v Pythonu, ale o tom vim, ze je pomalejsi. Proto si myslim, ze nejblizsi alternativa k cemu to porovnat je C++. Kazdopadne, to je nepodstatne, protoze jak uz jsem rekl, u webovych stranek JIT muze mit svuj vyznam.
Kazdopadne, muzete mi vysvetlit, v cem GUI editor vykonava ten stejny kod (treba asi v jakych funkcich)? Prece uzivatel neustale klika na jine funkce nad jinymi objekty. Cela vec, kterou editujete, se neustale meni. A v renderovani doufam nepocitaji tytez veci dvakrat. Bohuzel, slysim ten samy obecny argument, jak je to v Jave lepsi. Ale abyste aspon nejak zduvodnil, ze trasovani (nutne k optimalizaci za behu) bude stat mene nez optimalizace, ktere se tim ziskaji, to ne. Stejne tak nezduvodnujete, zda se vyplati za timto ucelem sezrat vice pameti (a ta je dost vzacnym zdrojem pro programy tohoto typu).
Take samozrejme, prelozit si to pro svou architekturu muzete i v C. Dokonce muzete prekladaci podat i vystup z profileru.
Kazdopadne, muzete mi vysvetlit, v cem GUI editor vykonava ten stejny kod (treba asi v jakych funkcich)? Prece uzivatel neustale klika na jine funkce nad jinymi objekty. Cela vec, kterou editujete, se neustale meni.GUI editor volá typicky stále tytéž funkce, pouze s různými parametry. To, že se mění editovaná věc, s optimalizací kódu skoro vůbec nesouvisí – vykonává se pořád ten samý kód. Když editujete textový soubor, data se také pořád mění, ale to ještě neznamená, že se po každém přidaném písmenku musí překompilovat celý editor…
Bohuzel, slysim ten samy obecny argument, jak je to v Jave lepsi.A to jste slyšel od koho? Já jsem tady zaznamenal jenom argument, že je to v Javě pomalejší, s odůvodněním „protože proto“.
vykonává se pořád ten samý kódAkorát s různými parametry občas dělá něco jiného, takže ho optimalizace připravuje maximálně na předchozí válku.
Co se tady člověk všechno nedozví…Dost často to, co sám chceš slyšet. A když jsme u toho, jestliže je nějakou optimalizaci možné vestavět do kompilátoru, pravděpodobně s ní není potřeba čekat do doby, než ten program poběží.
Ano. Jednim moznym druhem takovych optimalizaci je specializace funkci, kdy se pro casto volanou funkci s castecne shodnymi parametry se tato funkce prelozi jakoby tyto parametry byly konstatni (tedy ve specialnim pripade, kdy se funkce bez vedlejsich efektu vola se shodnymi parametry, se prelozi rovnou jako konstanta).
Problem je, ze toto jednak vyzaduje dost pameti (nekam musime schovavat vsechna ta data o volanich a prelozene varianty funkce), a za druhe funguje jen tehdy, pokud lze duvodne predpokladat, ze se bude tataz funkce volat casto se shodnymi nebo podobnymi parametry. Coz u weboveho serveru predpokladat lze, protoze je tam spousta funkci, ktere nahrazuji predem znamy text do predem zname sablony. Ale u grafickeho editoru? Opravdu byste musel blize popsat, jak by se to mohlo vyplatit.
Nebo byste musel uvest, jakou dalsi optimalizaci (ktera je ucinna za behu, ale nelze provest pri kompilaci) mate na mysli.
Jo, to se taky tvrdiva. Ale ja osobne si myslim, ze to ma vliv jenom v mizivem procentu pripadu. Rad bych videl nejaky priklad, kde to ma zasadni vliv, a kde to zaroven neumi vyresit standardni kompilator. A to nemluvim o tom, ze proto ty procesory tu predikci maji, a ta zvladne hrave 90% tohoto problemu (typickym prikladem muze byt test v kratke smycce).
Fakt bych to rad videl. Osobne tohle nepovazuji vubec za podstatny druh optimalizace (daleko efektivnejsi mi prijde prave treba eliminace podvyrazu, specializace funkci nebo vytahovani konstantnich vyrazu mimo smycku).
if (test) { … } else { … }Pokud JIT zjistí, že se větev
else
prakticky nikdy neprovádí, může kód uspořádat tak, že se rovnou začnou zpracovávat instrukce z if
u, kód pro else
se ani nemusí nahrávat do paměti atd. Jenom se někde na vhodném místě udělá test, zda ta podmínka opravdu platí. Statický kompilátor na tohle bez nějaké nápovědy nemá šanci přijít.
No, tohle je trochu jiny priklad nez predikce skoku, ale budiz. Pokud by JIT zjistil, ze test je v podstate konstanta, muze neco takoveho udelat. To uz nema daleko ke specializaci, o ktere mluvim vyse.
Kazdopadne, ja bych rad videl priklad s analyzou kdy je to lepsi nez bezny kompilator. Me totiz pripada, ze to ve vetsine pripadu bude kod zpomalovat, protoze se bude muset pro kazdy takovy if neustale ukladat hodnota test, aby se zjistilo, zda nahodou nebyva konstatni. Proste, pripada mi to jako tradeoff, ktery ve vetsine pripadu program zpomali, aby ho v nejakem specialnim pripade o neco malo zrychlil. Pokud byste ukazal, ze v grafickem editoru dochazi casto k te druhe moznosti, pak to beru. Ale ja nic takoveho nevidim.
Statický kompilátor na tohle bez nějaké nápovědy nemá šanci přijít.Ano, od toho je tu buď profiling nebo (v GCC) __builtin_expect
kód pro else se ani nemusí nahrávat do pamětiJak často je ten kód, co se nemusí nahrát, dost velký na to, aby to mělo nějaký význam? (+ námitky o příspěvek výš)
Jak často je ten kód, co se nemusí nahrát, dost velký na to, aby to mělo nějaký význam?Myslím, že často. Keš procesoru není nafukovací.
To je ale nahodou pravda! Do kodu pridavaji magicke schopnosti (sam jsem se o tom ted presvedcil pri 3hodinovem hledani chyby v obsluze preruseni v kernelu co ted pisu).
tak zrovna abicko je jeden ze serveru (z tech co pravidelne navstevuji) s nejvetsim poctem vypadkuJste si jist, že závada není na vašem přijímači? Nebo že to souvisí se serverovou aplikací? Já si na nějaký výpadek v poslední době nevzpomínám. A i kdyby k nějakým výpadkům došlo, s největší pravděpodobností to s Javou vůbec nesouvisí. Já si tedy alespoň nepamatuju na žádnou chybu v JVM, která by něco takového mohla způsobit. Nediskutuje se o GUI aplikaci, ale o Javě. Ostatně rychlost GUI nebude úzké místo renderovací aplikace.
> Java ... Je URCITE pomalsia, ako ekvivalent v C++, niekde viac, niekde menej.
Není tomu tak.
Dá se to shrnout asi takhle:
"In some cases Java is significantly slower, in others, significantly faster"
Zdroje:
http://en.wikipedia.org/wiki/Java_performance
http://scribblethink.org/Computer/javaCbenchmark.html
Jediné co lze říci že URČITĚ Java oproti C:
1) Java spotřebuje více paměti. S tou Java moc nepárá. Často ale vede agresivnější použití paměti k vyšším výkonům.
2) Java program bude startovat pomaleji. I spuštění triviálního programu vyvolá poměrně složitý zaváděcí proces a načítání knihoven (minimálně rt.jar) V Javě tak nemá cenu dělat jednoúčelovky, jako GUI jednoduchý textový editor. Projekty jako JEdit nemají moc šancí na masovou popularitu. Naopak u IDE jako Eclipse, kde aplikaci ráno spustíte a vypínáte s ukončením pracovní doby pár sekund navíc při startu nehraje velkou roli.
Ad 2) Nejsem si úplně jistý, zda neběží Java na pozadí. Nevím jak funguje na Windows/Linuxu, ale mám ověřeno že na Macu její první start zabere docela dost (v 64-bitovém režimu na 32-bitovém systému). Avšak spustím-li jí podruhé, je spuštění aplikace okamžité. Možná to tak bude i na ostatních systémech. Avšak protože mám k dispozici pouze tragicky pomalé PC s Windows XP, takže nemůžu efektivnost spuštění Javovské aplikace objektivně posoudit. Jednoduše na něm trvá vše dlouho (řádově sekundy, až minuty).
Opakovane spusteni bude urcite rychlejsi, uz jen kvuli nakesovanym HDD datum, tj. rt.jar bude v pameti, to urychli vec hodne. Od verze Java 1.6 pracuji na cachingu naparsovanych informaci, takze by se stale dokola nacitane a vyhodnocovane knihovny (rt.jar) nemuseli parsovat a vyhodnocovat stale dokola ale vyuzila by se nakasovana data.
Jo. Jenze GUI editory jsou prave oblasti, kde se ta rychlost Javy neprojevi, spis naopak (protoze, narozdil od treba webserveru, pousteji kod na nepredvidatelna data). Pokud mate jiny pocit, rad se poucim (ostatne, bylo by pekne, kdybyste upresnil, v jakych presne pripadech je Java rychlejsi).
Naopak, u GUI editoru je rychlost uzce svazana s co nejmensim pouzitim pameti (spoustu provazanych malych objektu, ktere nelze nijak predpocitat, protoze se neustale meni). Agresivnejsi pouziti pameti muze teoreticky vest i u takove aplikace k vyssim vykonum, volbou vhodnych datovych struktur. Ale neni uroven, na jake se pohybuji JIT optimalizace Javy - ty maximalne prelozi trochu jinak nejakou funkci.
JIT je zkratka tradeoff, ktery drive nebo pozdeji narazi na svuj limit.
Mimochodem, zajimave na tom 2. odkazu, ktery uvadite, je, ze vetsina tech vysvetleni (proc je Java rychlejsi) spociva v tom, ze Java nabizi lepsi abstrakci, ktere davaji kompilatoru vetsi prostor pro implementaci. Je to v souladu s mym vlastnim presvedcenim, ze budoucnosti neni ani tak JIT, jako spis lepsi abstrakce v jazycich, ktera nam dovoli delat slozitejsi optimalizace. V tomto smeru Java zadnym velkym pokrokem bohuzel neni, protoze je na temer stejne urovni, jako C++.
Ano GUI editory jsou oblast kde se rychlost neprojevi, hlavne ty jednoucelove, casto otvirane a zavirane. Naopak v serverovych aplikacich s nepretrzitym provozem je misto kde Java exceluje a ne nahodou je tam realne nasazovana. Z sve praxe mohu potvrdit ze takove aplikace (Java a Net) drtive prevazuji nad aplikacemi v C++, na desktopu je tomu naopak.
GUI aplikace jako IDE jako Eclipse, neco co rano spustite a s koncem pracovni doby vypnete, tam je rychlost sposteni relativne zanedbatelna, ma to pak blize paradoxne prave k serverovym aplikacim. Tam opet muze Java a jeji JIT opet excelovat. Jakmile se to spusti, trochu "rozehreje", jede to pekne.
kazda technologie ma svuj limit :) Snad mozna proto jich mame tolik.
Ano, odkazovany clanek (2) je zajimavy hlavne merenim, ohledne vyhodnoceni proc uz autor mlzi a tape. Doporucuji shrnuti a dalsi odkazy na wikipedia strance.
Nediskutuje se o GUI aplikaci, ale o Javě.diskutuje se o naprosto nesmyslnem prepisu gui apliakce do javy
Ostatně rychlost GUI nebude úzké místo renderovací aplikace.Blender neni jen renderer. GUI je jeho klicovou casti. A rychlost je zde kriticka stejne jako u rendereru. Blender neni textovy editor ci podobna ptakovina.
Netbeans startuji pomalu? No to je toho. Stejne to zapinam jednou za den a mezitim si prectu zpravy/udelam kafe, takze me to vůbec netrapi. A pri praci mi teda rychlost omezujici neprijde. Pravda, obcas se mi nechce treba prepnout zalozka, ale to se stava jenom pri hodne vytizenem procesoru. Jinak si nemam na co stezovat.
Tak se někdy podívej do Apple Storu.
Víš, tohle je ale problém pouze Windowsového přístupu, který drtivá většina programů (včetně Linuxových) bezmyšlenkovitě přebrala. Dobrým příkladem budiž XCode na Macu, kde i když zavřete všechna okna, tak program stále běží, dokud vyloženě neřeknete, že jej chcete vypnout. Jinde to je okno = program. Zavřete okno, zavřete program. Stupidní, co?
Podle mě to ale na Windows ani jinak udělat nelze. Jakmile Vám totiž zmizí okno z nabídky, tak se k programu prostě nedostanete. Leda, že by běželo něco v system tray a to už je dost netypický případ. Btw. to je důvod, proč je menu aplikace mimo okno. Ne, aby se měli windowsáci/linuxáci čemu divit a případně co napodobovat, ale aby bylo možné se k aplikaci bez oken vůbec dostat
Asi tě teď překvapím, ale existují Javovské aplikace, co nežerou příšerné množství paměti, běhají rychle a rychle i startují. A světe div se, jsou i použitelné a účelné. Nechávám je standardně zapnuté a vůbec mě to netrápí. Pochopitelně musím zmínit Esmsku, avšak i takový muCommander, jEdit a Cyberduck jsou malé a paměť nežerou. A to jsem kdysi měl jenom 2 giga ramky, teď mám 4 (aby mě neswapovaly grafický programy, když si pustím gamesu ). Na nedostatek paměti jsem si nikdy stežovat nemohl, to už víc žralo Safari díky načteným filmečkům z Youtube. A že zabírá NetBeans více paměti? To je přece logické, když musí držet naindexované třídy a všemožné další informace, aby se v něm rychle a pohodlně psalo...
Tak se přesuň z představy do reality. Denně mi tu běží (celou pracovní dobu vkuse):
Někdy ještě navíc:
A stále mám dostatek systémových prostředků pro mailového klienta, Safari, iTerm a další blbosti. Bez ztráty výkonu.
Co dělám špatně?
Visual Paradigm for UMLOT: znas jeste nejaky jiny pouzitelny CASE/UML tool pro Mac krome VP? (predpokladam, ze jsi mluvil o OS X)
Treba tato?
http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=java&lang2=gpp&box=1
Pokud byste chtel vazne tvrdit, ze Java (respektive jakykoli JIT kompilator) je na aplikaci typu Blender vhodnejsi, musel byste to IMHO dolozit nejakym solidnim argumentem. Pomerne rad bych si takovy poslechl.
Kdyz ctu takovyhle prispevky tak si pripadam absolutne menecennej. Vypada to, ze kdyz neumim vyresit memory leak za 10 minut a neznam "Thinking in C++" nazpamet tak vubec nemam pravo programovat. Mezi takovyhle vyvojare se teda neradim, ale presto vyvijim OSS software.
Kliiid. Tohle jsou ti echt programatori, kteri sice za dva dny nabastli v Ccku kus deraveho kodu ale ten kod je porad pomalejsi nez kdyby to nejaka ta "cvicena opice" napsala za pul hodky v jave :)
A taky rychly program to bol... :(
Nevim, jestli to byl vtip nebo ne, ale Blender je samozrejme napsany v C++, v Pythonu je jenom skriptovaci API, kde na rychlosti tolik nezalezi (protoze to hlavni, jako renderovani a vykreslovani, se dela z C++).
1) Nauč se číst a přečti si sám, k čemu je to dobré.
2) Tento program užitečný je; až vykonáš domácí úkol z bodu 1, pochopíš.
3) Jestli ho to přestane bavit, je to jeho věc. Nechceš, nepoužívej, nikdo tě nenutí.
stalo by za zminku uvest, ze porty je mozne vytvaret diky tomu, ze si dal Jeroen Bakker ( www.atmind.nl/blender/mystery_ot_blend.html ) tu praci s vytvorenim specifikace pro blend file, na jeho zaklade jsem cca pred 4 mesici vytvoril port pro C++ a OpenGL jako soucast sve bakalarske prace, ale to jen tak na okraj.
ale musim uznat ze autogenerovani DNA struktur blend souboru diky genericite javy ma neco do sebe, v tomhle pripade uznavam ze java ma pro podobnou ulohu jista pozitiva, jen by bylo slusne pana Bakkera, ktery stravil mnoho casu vytvarenim specifikace citovat ve svem dile
Zasa diskusia o nicom. Ti, co tvrdia, ze java je pomala, by mali prestat pouzivat verziu 1.2 a svoje pp06-ky uz konecne zahodit do kybla :-/
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.