Co zpomaluje Javu? A co překlad do nativního kódu?

phi

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #135 kdy: 14. 11. 2016, 17:41:20 »
Ale když tu byla zmíněna ta IDE, zkuste uvést příklad nějakého IDE srovnatelného s Eclipse, NetBEans nebo IntelliJ Ideou, které bude napsané v C nebo (ať máte šanci) v C++.

IDE považuji za aplikaci, která slouží pouze vývojářům. Takový vývoj pro vývoj. Spíš bych uvítal srovnání nějakých non-IT aplikací. Co třeba nějaký webový klient, účetnictví, střižna videa, 3D modelování, ... ?
Co treba vase bankovni karta ?
Co treba asi bambilion appek na  Androidu ?
Co treba Minecraft ?
Jinak Java je vazne spis backendova zalezitost, od Hadoop pres ElasticSearch po proprietarni reseni v korporatu.


Youda

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #136 kdy: 14. 11. 2016, 17:41:36 »
Heh, dobra komedie.

Realita je pritom tak prosta.
Java je "obvykle" pri vykonavani "bezneho" kodu o cca 10 - 15% pomalejsi nez C++. Java pozaduje cca 20-30% vice pameti nez C++. Za to Java nabizi veci, ktere C++ nikdy neda, Spring Boot framework v C++ opravdu nenapisete. Tolik obecna generalizace.

Java navic dovede pri dlouhodobem behu programu (nepzr J2EE aplikacni server) kod optimalizovat a pak je i rychlejsi nez C++.

Dalsi aspekt je doba nutna pro start JVM. Pokud tu nekdo (nebudeme jmenovat) s vaznou tvari linkuje "benchmark", ktery ukazuje ze C++ kod trval 1 sec a Java kod 3 sec (z cehoz 2 sec startoval JVM) a vyvozuje z toho, ze Java je 3x pomalejsi, pak ano, dotycny je hnup.

Videl jsem dokonce vazne mineny "benchmark", kde nejaky jouda v ruby mel cyklus 1000 iteraci jakesi ruby funkce a potom implementoval funkci v jave a volal ji v jave pres system exec - z tohoto "testu" vyvodil, ze java je cca 100x pomalejsi nez ruby...

gll

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #137 kdy: 14. 11. 2016, 18:20:03 »
Java navic dovede pri dlouhodobem behu programu (nepzr J2EE aplikacni server) kod optimalizovat a pak je i rychlejsi nez C++.

Nějaký konkrétní příklad? Tohle tvrzení jsem četl mnohokrát, ale ještě jsem neviděl kód, pro který to platí.

Dalsi aspekt je doba nutna pro start JVM. Pokud tu nekdo (nebudeme jmenovat) s vaznou tvari linkuje "benchmark", ktery ukazuje ze C++ kod trval 1 sec a Java kod 3 sec (z cehoz 2 sec startoval JVM) a vyvozuje z toho, ze Java je 3x pomalejsi, pak ano, dotycny je hnup.

V tom benchmarku se startup time nezapočítává.

Videl jsem dokonce vazne mineny "benchmark", kde nejaky jouda v ruby mel cyklus 1000 iteraci jakesi ruby funkce a potom implementoval funkci v jave a volal ji v jave pres system exec - z tohoto "testu" vyvodil, ze java je cca 100x pomalejsi nez ruby...

Kde jste to viděl?

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #138 kdy: 14. 11. 2016, 18:21:58 »
IDE považuji za aplikaci, která slouží pouze vývojářům.
Myslíte, že vývojáři sami sebe odbývají nějakým šuntem a to nejlepší programují pro ostatní? A nebo naopak IDE musí být špičkový program, protože když dáte sekretářce špatný textový editor, bude nadávat, ale bude ho používat, zatímco když dáte špatné IDE programátorovi, začne programovat vlastní?

Co třeba nějaký webový klient
Apache HTTP Client, Jetty Client, Netty HTTP kodek, Google HTTP Client Library for Java a mnohé další. Nebo jste myslel prohlížeč?

účetnictví
FlexiBee

střižna videa
Uvítal bych jakoukoli použitelnou OSS i kdyby byla napsaná v Brainfucku.

3D modelování
Díval jste se na ty výše uvedené aplikace? ZEBRA

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #139 kdy: 14. 11. 2016, 18:23:55 »
Nějaký konkrétní příklad? Tohle tvrzení jsem četl mnohokrát, ale ještě jsem neviděl kód, pro který to platí.
Jaký pro to používáte benchmark? (Předpokládám, že to své tvrzení máte něčím podložené, že to není jenom „nepátral jsem po tom, tudíž jsem to neviděl, tudíž to neexistuje“.)


gll

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #140 kdy: 14. 11. 2016, 18:27:03 »
Nějaký konkrétní příklad? Tohle tvrzení jsem četl mnohokrát, ale ještě jsem neviděl kód, pro který to platí.
Jaký pro to používáte benchmark? (Předpokládám, že to své tvrzení máte něčím podložené, že to není jenom „nepátral jsem po tom, tudíž jsem to neviděl, tudíž to neexistuje“.)

To zde tvrdíty vy a Youda. Jo na vás abyste poskytli příklad.

gll

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #141 kdy: 14. 11. 2016, 18:30:02 »
oprava:
Nějaký konkrétní příklad? Tohle tvrzení jsem četl mnohokrát, ale ještě jsem neviděl kód, pro který to platí.
Jaký pro to používáte benchmark? (Předpokládám, že to své tvrzení máte něčím podložené, že to není jenom „nepátral jsem po tom, tudíž jsem to neviděl, tudíž to neexistuje“.)

To zde tvrdíte vy a Youda. Jo na vás abyste poskytli příklad.

Youda

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #142 kdy: 14. 11. 2016, 19:16:41 »
Nějaký konkrétní příklad? Tohle tvrzení jsem četl mnohokrát, ale ještě jsem neviděl kód, pro který to platí.
Jaký pro to používáte benchmark? (Předpokládám, že to své tvrzení máte něčím podložené, že to není jenom „nepátral jsem po tom, tudíž jsem to neviděl, tudíž to neexistuje“.)

To zde tvrdíty vy a Youda. Jo na vás abyste poskytli příklad.

https://cs.wikipedia.org/wiki/HotSpot

A jak vidno z popisu technologie, priklad ti nikdo neposle protoze HotSpot optimalizace ja na urovni bytecode -> strojove instrukce a se zdrojakem nema nic spolecneho.

Zjednosduseny popis je takovy, ve JVM vytipovava "horke" kusy kodu (nejpouzivanejsi casti) a spekulativne zkousi ruzne optimalizace kompileru. Kdysi jsem videl nejaky clanek, ktery to popisoval na systemu co zpracovaval stram prichozich messages a pro velke messages a male messages (java objekty) to nakonec zkompilovalo jinak.

Je to defacto mix gentoo (kompilovani na miru zeleza) s genetickymi algoritmy.

 

ferrenz

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #143 kdy: 14. 11. 2016, 19:32:25 »
k te me miniankete:

odpovedi jsou vesmes jak pred rokem, tj Eclipse a par ide, dal vesmes utilitky.
krom vlastni naprosti priserne zkusenosti s Eclipse ( pomaly, sem tam lagy, pametozrout, sem tam crash) ostiatni neznam primo, nicmene i kdyby byly super, nesplnuji podstatu dotazu, tj neni mozne na nich poznat pouzitelnost jazyka.
upresnim, ocekaval bych aplikaci co zatizi cpu (skutecnou cinnosti, ne svou neefektivitou), jsou vypocetne pametove i IO narocne (opet ale jen svym principialnim uzitim, ne spatnym kodem).
od IDE neocekavam ze bude zrat > 5% cpu,mem,io takze IDE lze psal v jakemkoli jazyku, pokud clovek neni prase....

takze bud jsem prehlidl nebo se stale nejaky java klenot hleda:-)

Nejsou IDE, tim myslim poradna IDE jako IDEA s napr. type-aware autocomplete (ne textove editory), prave jedny z nejkomplikovanejsich dekstopovych aplikaci?

Rekl bych, ze porad jen menite zadani tak, aby to zadna aplikace v Jave nesplnovala a pak si vyvodite nesmyslny zaver, ze "neexistuji zadne desktopove aplikace v Jave". Vase puvodni podminky splnuje i ten Minecraft, ktery je poctem uzivatelu zatracene vysoko, mozna i vys nez ta ruzna IDE. By me celkem zajimalo, jake desktopove aplikace v jinych jazycich splnuji vase stale-se-menici zadani?


no, to nejsou. kod sice mozou mit celkem kosaty, ale z pohledu jazyku a jejich dospelosti pro realny svet jsou to naprosto nenarocne veci. cpu by nemely zrat vubec...vzdyt co delaji? nejnarocnejsi operace je nejspis neco jako hledani v nejakem indexu, databazi. je rok 2016 a tohle fakt neni nic u ceho by se mel system zapotit.....

a co vlastne hledam....no zacnu ciste ze sveta v kterem se ja pohybuju tj. napriklad vizualizacni sw jako zbrush,maya,max...ruzne archviz, dynamics, finite elements, kapalinove simulace, treba nejaky vetsi cad....atd. proste veci ktere dokazi zamestnat multi cpu,gpu,pamet,io a ktere je treba psat v dospelem jazyku. ale to je jen priklad, nemusi to byt z me branze, klidne muzou byt ruzna data mining, expertni systemy, kompexnejsi databaze, deep learning, analyza reci, proste cokoli kde se hw zapoti tim,ze resi kompexni problemy, nejen ze resi samy sebe...


Radek Miček

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #144 kdy: 14. 11. 2016, 19:33:02 »
Zjednosduseny popis je takovy, ve JVM vytipovava "horke" kusy kodu (nejpouzivanejsi casti) a spekulativne zkousi ruzne optimalizace kompileru. Kdysi jsem videl nejaky clanek, ktery to popisoval na systemu co zpracovaval stram prichozich messages a pro velke messages a male messages (java objekty) to nakonec zkompilovalo jinak.

To zní hezky, problém je ovšem v tom, že na složitější optimalizace je při běhu v produkci málo času a paměti.

Citace
Je to defacto mix gentoo (kompilovani na miru zeleza) s genetickymi algoritmy.

To je AFAIK hodně vzdálená charakteristika - produkční JVM si nemůže dovolit zkoušet "optimalizace", které mají katastrofální vliv na výkon (na rozdíl od genetického algoritmu) - nekonzistentní a těžko předvídatelné chování JVM by se uživatelům příliš nelíbilo.

phi

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #145 kdy: 14. 11. 2016, 19:33:13 »
Java navic dovede pri dlouhodobem behu programu (nepzr J2EE aplikacni server) kod optimalizovat a pak je i rychlejsi nez C++.

Nějaký konkrétní příklad? Tohle tvrzení jsem četl mnohokrát, ale ještě jsem neviděl kód, pro který to platí.


A neplati to pro kazdou NE unrollnutou smycku a pro kazdou NE inlajnutou funkci ? Java JIT compiler tyhle optimalizace dela. C/C++ compiler to bez hintu udela ? (Se ptam, C jsem naposledy resil na skole).

true

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #146 kdy: 14. 11. 2016, 19:37:51 »
https://cs.wikipedia.org/wiki/HotSpot

A jak vidno z popisu technologie, priklad ti nikdo neposle protoze HotSpot optimalizace ja na urovni bytecode -> strojove instrukce a se zdrojakem nema nic spolecneho.

To je ale škoda, protože v takovém příkladu by byl krásně vidět kód v Javě, bytekód, a generované strojové instrukce, třeba pro oba /dva+/ optimalizované případy. Potom bychom to mohli krásně v benchmarku srovnat, ne že ne.

Radek Miček

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #147 kdy: 14. 11. 2016, 19:41:55 »
Java navic dovede pri dlouhodobem behu programu (nepzr J2EE aplikacni server) kod optimalizovat a pak je i rychlejsi nez C++.

Nějaký konkrétní příklad? Tohle tvrzení jsem četl mnohokrát, ale ještě jsem neviděl kód, pro který to platí.


A neplati to pro kazdou NE unrollnutou smycku a pro kazdou NE inlajnutou funkci ? Java JIT compiler tyhle optimalizace dela. C/C++ compiler to bez hintu udela ? (Se ptam, C jsem naposledy resil na skole).

Java JIT tyto optimalizace dělá jen za určitých podmínek - např. když počet instrukcí v těle metody nepřekračuje určité číslo. Navíc není vždy zaručeno, že tyto optimalizace zvýší výkon a naopak ho nesníží.

Kromě toho kompilátor C++ to dokáže i bez hintu.

Youda

Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #148 kdy: 14. 11. 2016, 19:47:11 »

Videl jsem dokonce vazne mineny "benchmark", kde nejaky jouda v ruby mel cyklus 1000 iteraci jakesi ruby funkce a potom implementoval funkci v jave a volal ji v jave pres system exec - z tohoto "testu" vyvodil, ze java je cca 100x pomalejsi nez ruby...

Kde jste to viděl?

http://mrcook.uk/golang-vs-java-performance

Posledni komentar zacinajici "OMG!!!" jsem psal ja.
A autor pridal porovnani, kdy java iteruje sama, voila java zrychlila z 1200 se na 60 sec.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Co zpomaluje Javu? A co překlad do nativního kódu?
« Odpověď #149 kdy: 14. 11. 2016, 20:02:30 »
Proc je Java priblizne 3x pomalejsi nez C++, cim je ta aplikace tak bzdena? A jde Javovska aplikace prelozit do nativniho kodu s rozumnymi vykonostnimi vysledky?

Pokud Javu brzdi nejvic garbage c., je mozne psat aplikaci s manualnim uvolnovanim zdroju jako v c++? Je k tomu nejaka dobra literatura?
Ještě tu v podstatě nezazněl jeden triviální důvod - záleží na kvalitě implementace JVM. Například na ARM některé i velice jednoduché benchmarky ani neproběhnout, protože buď je běh o několik řádů pomalejší, nebo jsou nepřiměřeně větší nároky na paměť. Na ARM v mnoha případech kolabuje jak OpenJDK, tak verze od Oraclu. Na ARM64 je kvalita implementace (ne)překvapivě podstatně vyšší, nicméně opravdu bez problémů je běh jen na AMD64 (pochopitelně).