Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Filip Jirsák

Stran: 1 ... 276 277 [278] 279 280 ... 375
4156
Složitější optimalizace musí řešit kompilátor do bytekódu. V JIT fázi na to není čas.
Právě naopak, složitější optimalizace dělá až JIT, protože k nim má potřebné informace – na rozdíl od kompilátoru zdrojových kódů, který nemá nic jiného, než ten zdrojový kód.

Mimochodem, spousta javovského kódu běží na serverech, kde má JIT dny, týdny nebo měsíce času na optimalizaci. To je řádově víc, než kolik má javac.

4157
My chápeme že rychlost syntaxe nejde měřit, narozdíl od tebe ale umíme trošku generalizovat
Tak generalizujte, generalizujte. Vždyť jsme to psal už v minulém komentáři, že mne zajímá, co přesně ty benchmarky podle vás ukazují. Když to umíte, tak přece pro vás není problém, abyste to zformuloval.

Ono to totiž takhle vypadá, že ta obecná tvrzení a generalizace jsou jen zástěrkou toho, že vlastně nevíte.

4158
Jirsak, java je jazyk nekompilovanej, a to je jedna z jejich primarnich vlastnosti.
Množství toho, co všechno můžete vědět špatně, je zřejmě opravdu neomezené. JVM (Java Virtual Machine) provádí bajtkód. Programátoři nepíšou bajtkód v hexaeditoru, ale píšou program v nějakém programovacím jazyce, který se následně do bajtkódu kompiluje. Do bajtkódu se dá kompilovat několik jazyků, nejčastěji je to právě Java (což mimochodem vypovídá o znalostech zdejších „3× rychlejších“, protože není jasné ani to, zda píšou o Javě nebo o JVM). Kompilátor z Javy do bajtkódu je součástí JDK a obvykle se jmenuje javac.

4159
Podle většiny benchmarků je Java opravdu 2x až 3x pomalejší než C.
Vy tomu vážně věříte, že? Pořád to papouškujete dokola a nikdy vás nenapadlo zamyslet se, co ta věta vlastně znamená – a jestli vůbec má nějaký význam. Tak se nad tím prosím zkuste tentokrát zamyslet a tu větu vysvětlit.

Zde je malá nápověda. Java i C jsou programovací jazyky. Co znamená „programovací jazyk“? Obvykle je to nějaký standard, který popisuje syntaxi toho programovacího jazyka, a případně význam jednotlivých lexémů nebo tokenů. Vy porovnáváte rychlost programovacích jazyků. Znamená to, že porovnáváte rychlost těch standardů? Leda že byste jejich definici vytiskl a výtisky shazoval z věže… Tak porovnáváte rychlost aplikací napsaných v těch jazycích? Aplikací napsaných v C i v Javě je spousta, takže jak je budete porovnávat? Znamená ten výrok „Každá aplikace v Javě je 2× až 3× pomalejší než libovolná aplikace napsaná v C“? Co znamená „rychlost aplikace“ – třeba u kancelářského balíku, zálohovacího programu, budíku, webového serveru?

Někteří se tu snažili odpovědět proč tomu tak je. Vy diskutujete mimo téma a napadáte Čumila za odpověď na původní otázku.
Je marné pokoušet se odpovídat na nesmyslnou otázku. Mimo téma diskutují všichni, kteří na tu „otázku“ zdánlivě odpovídají. Klidně ať vám pomohou s výše uvedeným a vysvětlí, co ta otázka vlastně znamená.

4160
Jasně že ta vlákna dopadnou vždycky stejně – když váš první příspěvek do diskuse je lež…

Podle většiny benchmarků je to pravda.
Mohl byste odkázat na ty benchmarky, které ukazují, že Ferrenz nedostal žádnou odpověď, když se minule ptal na dobré desktopové aplikace napsané v Javě?

Ale už se nedivím, že nedokážete interpretovat výsledky benchmarku, když vám dělá problém i jednoduchá česká věta.

Navíc i ten Ferrenzův dotaz je zavádějící, protože původně se psalo o aplikacích obecně, on to najednou zúžil na desktopové aplikace.

4161
tyhle ty pindikovska srovnavaci vlakna dopadnou vzdy stejne....

nicmene tak pred rokem jsem v jednom podobnem vznesl ze zvedavosti dotaz, na najeakou libovolnou javovksou desktop aplikaci, ktera se da pouzit jako dukaz ze to jde....v tu dobu byl ale vysledek vsech odpovedi cistokrevna nula.....proste v jave neni napsane kvalitni vubec NIC. myslim ze par lidi nabydlo nejake utilitky, tooly atd, ale zadna big java desktop app vubec nikoho nenapadla......takze round #2, ma uz java nejakou vykladni skrin?
Jasně že ta vlákna dopadnou vždycky stejně – když váš první příspěvek do diskuse je lež… Už minule tady byly jmenovány stejné aplikace, jako dnes. Eclipse, NetBeans, IntelliJ Idea a další IDE z ní vycházející, FreeMind, NATO Mice Console, Northrop Grumman Agile Client, SeeTrack Military, US Navy JECP System Performance Model, US Navy JMAT Visualization, Gecco, Boeing Mass Properties Toolkit, Zebra Imaging, Vespa, aplikace NASA JPL Maestro Team… Stačí, nebo mám pokračovat?

4162
Vývoj / Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« kdy: 13. 11. 2016, 10:53:34 »
On řeší to, že overhead GC roste, když je méně paměti - což se u klasického mallocu tolik neděje.
Ne, neřeší, to je daleko za jeho znalostmi. On jenom papouškuje, co četl někde v diskusích. Člověk, který aspoň tuší, jak funguje GC, nebude psát „jazyk X je 300% rychlejší než jazyk Y“.

Citace
Takže i čistý výkon na CPU může být ve výsledku pod JVM vyšší, než když stejný kód napíšete v C.
Jak často se to děje v praxi?
Zhruba tak stejně často, jako je potřeba řešit výkon tím, že se nějaká aplikace celá napíše v C. Jinak JVM kód za běhu optimalizuje včetně optimalizace skoků, třeba JRockit dělá při optimalizacích evidentně i docela divoké kousky. Takže je dost pravděpodobné, že některé části nativního kódu jsou za běhu v JVM optimalizované lépe, než jak je dokáže optimalizovat překladač na základě statické analýzy kódu. Akorát že na těch dílčích optimalizacích nikdo nezávisí, takže se nijak neměří a nezjišťují. Nemám tedy kód, na který bych ukázal a napsal „JRockit to při takovéhle profilu používání optimalizuje na tenhle nativní kód“.

Citace
Rychlost totiž snadno vyřešíte přidáním dalšího levného stroje
To nemusí být vůbec pravda: Třeba v případě mobilního telefonu. Nebo, když máte výpočetní cluster, tak abyste dosáhl znatelného zrychlení, musíte přidat třeba desítky ne zrovna levných strojů - proto některé společnosti přešly od Cloudery k MapR, protože v MapR přepsali část Hadoopu do C++ a výkonostní rozdíl je znatelný - viz Is it significant to rewrite HDFS, Hadoop/Spark or HBase in C/C++ to improve computational efficiency?.
Bavíme se ale (asi) o rychlosti vykonávání aplikace na CPU. Aplikace, pro které je tohle kritické, nebudete provozovat na mobilním telefonu. V případě clusteru pouhým přepsáním z Javy do C++ zvýšíte výkon minimálně, přidat ne zrovna levné stroje do clusteru je pořád levnější. Výkon můžete podstatně zvýšit tím, že změníte algoritmus zpracování. Pak se může ukázat, že ten algoritmus nejde efektivně implementovat s prostředky JVM (a implementovat to přímým přístupem do paměti nedává pod JVM moc smysl, protože pak ztrácíte výhody JVM). Také je pravda, že clusterová řešení jdou proti výhodám JIT kompilace, protože u levných hloupých procesorů ztrácíte tu výhodu kódu optimalizovaného pro spekulativní provádění kódu. Nebo-li i když se jedná o výpočetně náročnou aplikaci, zvolený jazyk (nebo spíš prostředí) je spíš podružná záležitost, výkon mnohem víc ovlivňují jiné věci – na prvních třech místech jsou možnost paralelizace, použité algoritmy a schopnost využít vysokého výkonu procesoru (aby procesor minimálně čekal – tj. aby měl data v cache, nemusel se synchronizovat s jinými vlákny, aby mohl kód provádět paralelně a aby využil výsledky spekulativního provádění kódu).

4163
Vývoj / Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« kdy: 13. 11. 2016, 09:10:05 »
GC zabíjí málo paměti.

JIT a platforma kolem něho žere výkon.

Preferování bezpečnosti před rychlostí. Opět ztráta výkonu.

Takže výsledek zhruba 300% pomalejší než C++. Alespoň podle benchmarks game.
To jsou akorát kecy někoho, kdo vůbec netuší, o čem je řeč. Když řešíte overhead GC, měl byste také dodat, že i aplikace napsaná v C má automatickou správu paměti a něco stojí i ten luxus, že si naalokujete 10 bajtů, pak je zase vrátíte a neznamená to alokaci celé nové stránky od jádra.

JIT platforma žere levný výkon v době běhu programu výměnou za ušetření drahého výkonu při vývoji programu. Navíc umožňuje optimalizovat nativní kód podle aktuální platformy, na které program běží, a podle skutečného způsobu použití. Takže i čistý výkon na CPU může být ve výsledku pod JVM vyšší, než když stejný kód napíšete v C.

Preferování bezpečnosti před rychlostí odpovídá požadavkům na IT. Rychlost totiž snadno vyřešíte přidáním dalšího levného stroje, bezpečnost takhle vyřešit nejde. Navíc k čemu vám je teoretická rychlost aplikace, když vám ta aplikace kvůli nějaké triviální chybě neběží, nebo když vedle ní běží hackerův kód, který je součástí nějakého botnetu.

Když interpretujete výsledky nějakého měření, musíte také vědět, co se měřilo. Což evidentně Mysteriozni ani čumil nevědí, protože jinak by nemohli napsat nicneříkající blábol o tom, že je něco 3× rychlejší nebo pomalejší. V čem je to rychlejší? Tiskárna rychleji vytiskne papír, rychleji se zapíšou data na disk, u kvízu běží čas 3× rychleji? Mimochodem, i když byste chtěli porovnávat výkon na (C)PU, zaspali jste dobu, protože takovéhle věci se dnes neřeší zrychlováním algoritmu o drobná procenta, ale řeší se paralelizací.

4164
Vývoj / Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« kdy: 12. 11. 2016, 15:14:45 »
Zrovna Javisté často reimplementují existující software v Javě.
Protože z toho, že to bude implementované i v Javě, plynou nějaké výhody oproti existujícím implementacím. Některé implementace v Javě se zase reimplementují v C# nebo inspirují implementace napsané v JavaScriptu.

4165
Vývoj / Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« kdy: 12. 11. 2016, 14:01:31 »
Jediné možné objektivní srovnání je porovnání implementací stejné úlohy v různých jazycích.
To by platilo jenom tehdy, pokud by všechny porovnávané jazyky měly být pro nějakou úlohu stejně vhodné. Zrovna pro C a Javu takových úloh asi moc nebude, v případe C++ a Javy by nějaký průnik mohl existovat – ale zase to budou komplexní úlohy, které budete velmi těžko nějak porovnávat (rychlost běhu programu to nebude ani náhodou).

Vy zde stále uvádíte příklady softwaru napsaného v Javě, ke kterému neexistuje alternativní implementace. Jediná existující implementace bude logicky nejlepší.
Neexistuje k tomu alternativní implementace, protože každému soudnému člověku je jasné, že nedává smysl psát alternativní implementaci s pomocí nástroje, který je pro danou věc méně vhodný než současné řešení. Prostě jsou různé jazyky a platformy vhodné na různé věci. A když se to někde překrývá, je potřeba porovnávat to podle kritérií, která jsou důležitá pro tu danou úlohu.

4166
Vývoj / Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« kdy: 12. 11. 2016, 13:47:52 »
Ne, byl to stejný algoritmus (logicky), nějaký matematický výpočet nad vektory, nepamatuju si přesně detaily, ale ten kód někde mám, pamatuju si, že jsem to přepisovat ještě do Go a Swiftu. Java bumboys reagovali tím, že to není fér, protože Java neumí alokovat na zásobníku, což ovšem byla celá pointa zmiňovaná od začátku, takže vlastními slovy potvrdili, co ostatní říkali. Celé to má ještě více aspektů, jako běh při akutním nedostatku paměti nebo na ARM, ale i na amd64 s 64GB RAM to Java prostě nedá kvůli JVM.
Takže závěr byl, že na úlohy, pro které není Java vhodná, je nevhodné používat Javu. Což věděli všichni od začátku, jenom někdo (nevím, zda přímo Zboj) měl potřebu dokazovat to – složitě a iterováním přes několik neefektivních implementací v C.

4167
Vývoj / Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« kdy: 12. 11. 2016, 13:40:25 »
Vyber si libovolnou "reálnou" úlohu a pošli sem své řešení v Javě. Ostatní diskutující se pokusí napsat rychlejší řešení v jiném jazyku.
To je dost hloupé zadání, nemyslíte? Je program, který denně používají tisíce lidí, dostatečně reálná úloha? Já bych řekl, že ano. Takže takové „řešení v Javě“ může být například běhové prostředí pro Groovy, Scalu, nebo Kotlin. Tato běhová prostředí shodou okolností zahrnují JVM. Bylo by fajn, kdyby někdo jen tak na základě komentáře na Rootu napsal rychlejší JVM, ale já považuji za velmi nepravděpodobné, že by se do toho někdo pustil.

Možná jste nemyslel jakoukoli úlohu, ale něco jednoduchého, implementaci nějakého algoritmu apod. Jenže tím už dost omezujete zadání a hlavně se vzdalujete reálnému světu, protože v něm se v drtivé většině nepoužívají jednoduché programy řešící jedinou úlohu, právě naopak, používají se komplexní programy.

Navíc jste zadání omezil jen na rychlost běhu programu, což je jen jedno možné kritérium, a také se moc nepotkává s reálným světem. Jindy může být důležitá paměťová náročnost, rychlost vývoje, možnost dalšího rozvoje programu, škálovatelnost. A obvykle to bude nějaká kombinace těchto požadavků.

Prostě je nesmyslné obecně srovnávat programovací jazyky nebo platformy. Navíc v reálném světě je to přesně opačně, nehledám, co bych naprogramoval v nějakém jazyce, ale mám nějaké zadání, a k němu hledám vhodný jazyk. Pokud mám nějakou úlohu, při které potřebuju vyždímat maximum z CPU, asi sáhnu po C nebo C++, pokud mne bude zajímat bezpečnost kódu, budu se zajímat o Go, Rust nebo Erlang, pokud budu psát webovou aplikaci běžící v prohlížeči, podívám se po JavaScriptu a jazycích, které se do něj kompilují nebo transpilují, pokud budu chtít integrovat spoustu různých komponent a služeb do nějaké komplexní aplikace, zvolím Javu nebo C#.

4168
Vývoj / Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« kdy: 12. 11. 2016, 11:53:33 »
Psal jsem o konkrétním případě, kdy kód napsaný inteligentně pracuje s mnoha objekty alokovanými na zásobníku, což Java neumožňuje, pročež je řádově pomalejší.
Asi máme každý jinou definici inteligentně napsaného kódu. Já bych třeba od inteligentně napsaného kódu očekával, že bude aspoň dělat to, co má. Java neumožňuje objekty alokovat na zásobníku, tudíž v Javě takový kód nemůže existovat. Neexistují kód bude nejen řádově pomalejší, bude dokonce nekonečněkrát pomalejší, nebude dělat nic – a podle mne to rozhodně není inteligentně napsaný kód.

Inteligentně napsaný kód podle mne nejen dělá, co má, ale navíc dobře využívá prostředků dané platformy. Takže nebudu posuzovat, zda ten kód dobře pracuje s mnoha objekty alokovanými na zásobníku, ale jak dobře dělá to, co dělat má. A pokud při tom používá mnoho objektů alokovaných na zásobníku, prosím, ať to tak dělá, ale je to nepodstatný implementační detail.

4169
Vývoj / Re:Java-událost stisknutí tlačítka
« kdy: 12. 11. 2016, 11:39:22 »
Chování při držení klávesy je podle mne závislé na platformě (operačním systému). Java ty události jenom přebírá ze systému.

4170
Vývoj / Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« kdy: 12. 11. 2016, 09:42:08 »
Kdo zná Javu a jeden z moderních jazyků typu C(++), C#, Go nebo Swift, snadno napíše microbenchmark, co Javu roznese na kopytech.
V případě C/C++ to zcela jistě neplatí. Dnes používané JVM jsou totiž napsané právě v C/C++, takže každý výsledek běhu benchmarku pro Javu je zároveň i výsledkem pro C/C++. Asi budete oponovat, že se daná úloha dá v C/C++ napsat efektivněji, než že si vytvoříte vlastní jazyk, pro něj napíšete kompilátor a VM, a v tom jazyce pak tu úlohu vyřešíte. Ano, to je v mnoha případech pravda, zejména u microbenchmarků (a ve značné části reálných případů to pravda není, zejména pokud už ten jazyk a nástroje nutné pro běh vytvořil někdo před vámi – jak ukazuje obliba mnohých jazyků jako Java, Python, JavaScript, PHP a mnohé další). Jenže o efektivitě vy jste nic nepsal. (A také by záleželo na tom, která efektivita vás zajímá – paměťová při běhu programu, doba běhu programu, celková náročnost na zdroje, efektivita vývoje…) Vy byste prostě z množiny všech možných hloupých i dobrých řešení náhodně vybral jedno pro každý implementační jazyk, a ta byste porovnal. Výsledek by ovšem byl zcela náhodný a nevypovídá vůbec o ničem. Nanejvýš ho nějaký mysteriózní tazatel použije ve svém dotazu, když se mu nebude chtít generovat náhodné číslo – kolikrát je něco rychlejší nebo pomalejší – jiným způsobem.

Stran: 1 ... 276 277 [278] 279 280 ... 375