Proč je Java pomalá a problémová?

Re:Proč je Java pomalá a problémová?
« Odpověď #120 kdy: 18. 12. 2013, 14:53:45 »
A JVM vyrobíte a spustíte v čem ? Odpovím si sám v nativním kódu. Taktéž tam bude muset být něco co toho bumbrlíčka JVM dokáže dostat a spustit, bude tam muset být podpora na přepínání vláken a a procesů a další věci a ovladače budou nutně muset být v nativním kódu.

Jasně, ale (naprosto laicky a neinformovaně) si umím představit, že ten kód pod JVM by byl opravdu minimalistický ve stylu mikrokernelu a většina logiky by byla už v jvm. Vždyť třeba takový driver v principu může jenom předávat data tam a zpátky a veškerá logika by klidně mohla být v javě (pokud by platilo, že výkon javy je v pohodě).

Plná kontrola nad běžícím kódem je dávno hotová, je to režim virtuální paměti v x86,. Povšimněte si že od W2K a na Linuxu asi odjakživa se aplikace nemohou bořit navzájem, taktéž nemohou bořit jádro.

Pod plnou kontrolou si představuju něco takového jakože třeba mám plugin, který může využívat jenom nějakou část funkcionality, protože na jinou prostě nemá jak šáhnout. To je trochu něco jiného než kód, který si může skákat kamkoli ho napadne.

Platforma s tenkou vrstvou pro JVM se neujala proto, že vždycky se našel nějak blb co uměl aplikaci napsat nativně s lepšími výsledky než v Javě.
Pokud by to bylo opravdu tak, tak by to byla odpověď na otázku, jestli je java stejně v pohodě* jako C nebo ne.

* všeobjímající termín zahrnující všechny myslitelné metriky jako spotřeba paměti, rychlost, vyvážený výkon, paralelizovatelnost atd. :)


Pavel Tisnovsky

Re:Proč je Java pomalá a problémová?
« Odpověď #121 kdy: 18. 12. 2013, 14:59:28 »
To je dobrá připomínka - proč vlastně všchny "JVM-only" operační systémy zkrachovaly. Čistě pocitově mi to přijde podobné jako u toho Looking Glass - prostě se ukázalo, že java na tyhle věci vhodná není. Ale to je fakt jenom úplně laický neinformovaný odhad zvnějšku.

Protoze vlastne nejsou zapotrebi, evidentne se to po ekonomicke strance nevyplati nikomu vyvijet a podle me je to tak dobre. Kdyz uz mame tak slozite ulohy pro pocitace, ze potrebujeme operacni system (coz neni vzdy nutne - rekneme odhadem 50% mikroprocesoru a mikroradicu zadny skutecny OS nehoni, proc taky :), tak se ukazalo nejlepsi mit ten system vrstveny, dole nejaky HAL (at se za nim skryva cokoli, treba kus BIOSu), nad nim rozumne jadro/mikrojadro (ktere je vlatne tak jednoduche z hlediska navrhu, ze to zvladneme i v cecku), nad tim dalsi sluzby typu FS atd. a nad tim klidne i JVM. Proc cpat JVM na nizsi vrstvu nez je nutne a efektivni a proc na druhou stranu psat cele aplikace ve zbytecne nizkourovnovych jazycich?

Kolemjdoucí

Re:Proč je Java pomalá a problémová?
« Odpověď #122 kdy: 18. 12. 2013, 15:14:54 »
Jasně, ale (naprosto laicky a neinformovaně) si umím představit, že ten kód pod JVM by byl opravdu minimalistický ve stylu mikrokernelu a většina logiky by byla už v jvm. Vždyť třeba takový driver v principu může jenom předávat data tam a zpátky a veškerá logika by klidně mohla být v javě (pokud by platilo, že výkon javy je v pohodě).

Jistě by šlo mít černou skříňku která nabootuje z firmware, nahraje z firmware JVM a to spustí, to bezesporu jde.
Driver musí mít nutně nativní část jelikož v Javě ani JVM vůbec nejsou některé věci třeba čtení a zápis portu, přístup do paměti na konkrétní fyzickou (nikoliv virtuální) adresu a mnoho dalšího, i když souhlasím s tím že nějaká logika může být teoreticky být v Javě.

Pod plnou kontrolou si představuju něco takového jakože třeba mám plugin, který může využívat jenom nějakou část funkcionality, protože na jinou prostě nemá jak šáhnout. To je trochu něco jiného než kód, který si může skákat kamkoli ho napadne.

Částečně to jde, dá se šachovat s dostupností DLL, ale není to obvyklé.

Pokud by to bylo opravdu tak, tak by to byla odpověď na otázku, jestli je java stejně v pohodě* jako C nebo ne.

Například dneska se do každé ledničky tahá web browser a nikdo nebude platit za hardware pro případného bumbrlíčka v Javě, když může mít nativní Operu a ušetřit tak USD.

Re:Proč je Java pomalá a problémová?
« Odpověď #123 kdy: 18. 12. 2013, 15:22:14 »
Protoze vlastne nejsou zapotrebi, evidentne se to po ekonomicke strance nevyplati nikomu vyvijet
To by mě právě zajímalo. Sun se o to pokoušel, takže si asi myslel, že by se to hodit mohlo. A zajímalo by mě, jestli to utnuli, protože se to nedařilo, nebo prostě jenom kvůli katování kostů...

Proc cpat JVM na nizsi vrstvu nez je nutne a efektivni
Umím si představit, že by to mohlo přinést spoustu úplně nových možností - hlavně pro bezpečnost: třeba snadnější verifikaci kritických částí kódu, nebo třeba lepší granularitu oprávnění a jejich volnou kombinovatelnost - ne jenom podle uživatele, jak je to víceméně dneska, ale podle funkcionality - a to ne jenom na úrovni procesů, ale i uvnitř nich - např. konkrétní plugin má právo udělat operace X,Y,Z, jiný X,Y a jiný Y,Z - a to všechno v rámci jednoho procesu a verifikovatelně (za předpokladu, že jvm pracuje správně).
Nebo právě různé ty klaudové skopičiny - třeba snadnější migrace běžících procesů by se určitě hodila, dneska se to řeší buď celkem krkolomně, nebo neřeší vůbec...

jelikož v Javě ani JVM vůbec nejsou některé věci třeba čtení a zápis portu
Samozřejmě jsem počítal s tím, že takový JVM-OS by měl to JVM trochu upravené oproti tomu současnému :)

Částečně to jde, dá se šachovat s dostupností DLL, ale není to obvyklé.
Pořádně to nejde, protože v rámci jednoho procesu může libovolný kód kamkoli zapsat, odkudkoli číst a cokoli spustit. Takže buď operaci X může udělat celý proces, nebo žádná jeho část.

Pavel Tisnovsky

Re:Proč je Java pomalá a problémová?
« Odpověď #124 kdy: 18. 12. 2013, 15:36:07 »
Protoze vlastne nejsou zapotrebi, evidentne se to po ekonomicke strance nevyplati nikomu vyvijet
To by mě právě zajímalo. Sun se o to pokoušel, takže si asi myslel, že by se to hodit mohlo. A zajímalo by mě, jestli to utnuli, protože se to nedařilo, nebo prostě jenom kvůli katování kostů...

Proc cpat JVM na nizsi vrstvu nez je nutne a efektivni
Umím si představit, že by to mohlo přinést spoustu úplně nových možností - hlavně pro bezpečnost: třeba snadnější verifikaci kritických částí kódu, nebo třeba lepší granularitu oprávnění a jejich volnou kombinovatelnost - ne jenom podle uživatele, jak je to víceméně dneska, ale podle funkcionality - a to ne jenom na úrovni procesů, ale i uvnitř nich - např. konkrétní plugin má právo udělat operace X,Y,Z, jiný X,Y a jiný Y,Z - a to všechno v rámci jednoho procesu a verifikovatelně (za předpokladu, že jvm pracuje správně).
Nebo právě různé ty klaudové skopičiny - třeba snadnější migrace běžících procesů by se určitě hodila, dneska se to řeší buď celkem krkolomně, nebo neřeší vůbec...

Sun to zkousel, ale vime jak to posledni roky se Sunem bylo, nejak takto: http://static.arstechnica.net/assets/2009/04/sun-oracle-thumb-640xauto-4590.jpg  :-)

S tou granularitou opravneni je to pravda a jde o zajimavou myslenku. Dneska to JVM resi pres java.policy a celkem rozumne, kdyby to bylo v ramci OS, bylo by to urcite pro nektere typy serveru (napriklad) zajimave. Ale porad je tady ten argument, jestli se to vyplati v dobe, kdy si kdokoli muze vzit Linux/BSD whatever, postavit nad tim desktop a zacit prodavat. Ty investice do Linuxu a hlavne predtim do Unixu by nekdo musel udelat znovu a asi by neziskal nejak vyznamnou hodnotu, jen o jednu vrstvu mezi aplikaci a HW mene; ale nevim, treba to napadne nekoho z IBM nebo podobnych molochu.

JVM (v dost osekane variante) bezi ale i na Kindle a podobnych zarizenich, takze to svoje opodstatneni asi ma (a tady bylo jasne proc - mnozstvi knihoven, ktere mohli autori kinkdlu pouzit).


Re:Proč je Java pomalá a problémová?
« Odpověď #125 kdy: 18. 12. 2013, 15:38:44 »
Mně právě přesně takový přišel: "I cizí "velké" java aplikace mi dělají problémy více, než jiné (jdownloader, eclipse, android) pády, záseky, lagy... "
Tohle je ale přece přesně o tom „hrubém výkonu“. Co chcete masivně paralelizovat na JDownloaderu, eclipse, Androidu? Pokud chcete porovnávat celkový uživatelský dojem – má někdo tyhle zkušenosti (pády, záseky, lagy) třeba s GMailem?

já jsem to pochopil jako "proč když vidím, že je něco napsané v javě, očekávám, že to bude obrovský moloch s velkými nároky na paměť, nevyrovnaným výkonem atd.?"
Na to je jednoduchá odpověď – protože to takhle na internetových diskusních fórech lidé píšou. Co na tom, že to nemají podložené vlastními zkušenostmi, ale jen to navzájem opisují jeden od druhého…

Aniž bych do javy viděl, předpokládám, že JVM je taková obdoba cpu instrukční sady a java je prostě jazyk nad tou sadou. Takže jazyk je určitě limitovaný sadou, ale ne naopak - tj. pokud by byla pravda, že aplikace v javě jsou naprd, neplyne z toho, že je naprd JVM, protože můžou (aspoň teoreticky) existovat jazyky, které nad JVM budou v celkovém dojmu pracovat líp.
Java je assembler nad tou instrukční sadou, překládá se vpodstatě přímočaře do Java bajtkódu. Nějaký prostor, co by bylo možné s JVM dělat lépe ale v Javě to nešlo, tam prakticky není. Jiné jazyky mohou přidat svou runtime knihovnu a přidat do svého jazyka konstrukce, které tohle budou používat, takže to programátora povede k psaní lepšího kódu. Ale není to nic, co by v samotné Javě nešlo napsat. Záleží tedy na tom, zda se bavíme o tom, co je možné, nebo co je běžné.

Samoztnýho by mě tohle zajímalo - jestli existují nějaká solidní data ohledně _průměrné_ efektivity, stability, bezpečnosti atd. atd. javových aplikací versus průměrných aplikací postavených na něčem jiném.
Obávám se, že by to stejně nebylo porovnatelné – protože průměrná javovská aplikace bude něco jiného, než průměrná aplikace napsaná v něčem jiném. Jedině si vzít nějakou kategorii aplikací, kde se vyskytují aplikace obojího druhu – samozřejmě s tou výhradou, že závěry nebude možné aplikovat na jiné druhy aplikací. Třeba by se takhle mohly porovnat webové servery – Apache, Nginx, IIS, Jetty, Tomcat, něco postaveného na Netty (třeba server Avastu). I v téhle kategorii je každý určený na něco jiného, ale určité srovnání by se udělat dalo.

vvv_killer

Re:Proč je Java pomalá a problémová?
« Odpověď #126 kdy: 18. 12. 2013, 15:42:55 »
JVM-OS? Prosím vás, kecejte o takovejhle věcech až o nich budete něco vědět, fakt nesnáším když o čemkoli kecaj lidi kteří vědi hovno.
Čas který stráví program v kernel space musí být minimální. V případě javy a (buď JVM a nebo jazelle na ARM) by se tento čas opravdu velmi protáhl.
Nejenže by byl takový OS neefektivní, ale ještě žravý na energii (a jakou zbraň má ARM proti x86? SPOTŘEBU).

Re:Proč je Java pomalá a problémová?
« Odpověď #127 kdy: 18. 12. 2013, 15:43:44 »
Například dneska se do každé ledničky tahá web browser a nikdo nebude platit za hardware pro případného bumbrlíčka v Javě, když může mít nativní Operu a ušetřit tak USD.
A proto je ve spoustě těch zařízení Android. Aha.

Re:Proč je Java pomalá a problémová?
« Odpověď #128 kdy: 18. 12. 2013, 15:44:55 »
Sun to zkousel, ale vime jak to posledni roky se Sunem bylo, nejak takto: http://static.arstechnica.net/assets/2009/04/sun-oracle-thumb-640xauto-4590.jpg  :-)
Tak to je výborný :))

Ty investice do Linuxu a hlavne predtim do Unixu by nekdo musel udelat znovu a asi by neziskal nejak vyznamnou hodnotu, jen o jednu vrstvu mezi aplikaci a HW mene; ale nevim, treba to napadne nekoho z IBM nebo podobnych molochu.
Já mám stejně pořád takový podezření, jestli to nebylo právě podobně jako s tím Looking Glass - je to bomba koncept, přináší to super nové možnosti, dokázali jsme, že to v javě zrealizovat jde, ale ... ...ale bohužel je to nepoužitelně pomalý a padá to jenom se na to člověk podívá :)

(ale to je tím, že jsem k javě tak nějak předem skeptickej, žádný reálný důvody pro tenhle dojem nemám :)

Re:Proč je Java pomalá a problémová?
« Odpověď #129 kdy: 18. 12. 2013, 15:45:39 »
Platforma s tenkou vrstvou pro JVM se neujala proto
Píšete o Androidu, že? Takže proč že se to neujal?

Kolemjdoucí

Re:Proč je Java pomalá a problémová?
« Odpověď #130 kdy: 18. 12. 2013, 15:56:55 »
A proto je ve spoustě těch zařízení Android. Aha.

A web browser tam mají v Javě nebo nativní ? Pokud nativní, pak se žádná tenká vrstva nekoná. Nehledě na to, že v telefonech jsou tuny nativního kódu nutné pro samotný rádiové části a dalšího hardware.

konkrétní plugin má právo udělat operace X,Y,Z, jiný X,Y a jiný Y,Z
Nebo právě různé ty klaudové skopičiny - třeba snadnější migrace běžících procesů by se určitě hodila, dneska se to řeší buď celkem krkolomně, nebo neřeší vůbec...

A opravdu to tak funguje spolehlivě, je to odolné proti šťourání třeba přes reflexi ? To nevím, to se ptám.

V cloudech se přesunuje celý běžící VM mezi fyzickými stroji, mají na to udělátor třeba ve VMWare.

Re:Proč je Java pomalá a problémová?
« Odpověď #131 kdy: 18. 12. 2013, 15:58:12 »
Pokud chcete porovnávat celkový uživatelský dojem – má někdo tyhle zkušenosti (pády, záseky, lagy) třeba s GMailem?
GMail je špatný příklad, protože tam fakt netušíme, jak co a proč má Google udělané, co je rychlé jenom díky cachování atd. atd.

Na to je jednoduchá odpověď – protože to takhle na internetových diskusních fórech lidé píšou. Co na tom, že to nemají podložené vlastními zkušenostmi, ale jen to navzájem opisují jeden od druhého…
Já to ale slýchám i od adminů, kteří javové aplikace reálně spravují. Je možné, že to je fakt tím, že úroveň programátorů v Javě je obecně průměrně nižší, tomu bych i věřil.

Tohle je ale přece přesně o tom „hrubém výkonu“. Co chcete masivně paralelizovat na JDownloaderu, eclipse, Androidu? [...]
Nějaký prostor, co by bylo možné s JVM dělat lépe ale v Javě to nešlo, tam prakticky není.
Měl bych takový možná hloupý příklad, do vnitřností JVM opravdu nevidím... V Erlangu jsou afaik všechny odkazy v paměti z principu věci vždycky jednosměrné (vždycky odkaz jenom na starší data) -> neexistují cykly -> GC může být podstatně jednodušší, rychlejší a nemá takový dopad na latenci.
Takový nějaký podobný efekt by v JVM nastat nemohl? Že by prostě z nějakého principu jazyka došlo k tomu, že by celkově ta aplikace měla "hezčí chování"? 

Jedině si vzít nějakou kategorii aplikací, kde se vyskytují aplikace obojího druhu – samozřejmě s tou výhradou, že závěry nebude možné aplikovat na jiné druhy aplikací. Třeba by se takhle mohly porovnat webové servery – Apache, Nginx, IIS, Jetty, Tomcat, něco postaveného na Netty (třeba server Avastu). I v téhle kategorii je každý určený na něco jiného, ale určité srovnání by se udělat dalo.
Přesně tam myslím ta debata předtím směřovala: "ukažte mi aplikace v oblasti XY, které se prosadily".

Čas který stráví program v kernel space musí být minimální. V případě javy a (buď JVM a nebo jazelle na ARM) by se tento čas opravdu velmi protáhl.
Samozřejmě by v kernel space nejel celý JVM, to dá rozum. Proto zmínka o mikrokernelu.

Píšete o Androidu, že? Takže proč že se to neujal?
Android je pořád klasický stack. Já jsem myslel podstatně tenčí vrstvu pod JVM, opravdu jenom ve stylu nějakého speciálního mikrokernelu... (něco ala L4Linux)

Re:Proč je Java pomalá a problémová?
« Odpověď #132 kdy: 18. 12. 2013, 16:00:51 »
A opravdu to tak funguje spolehlivě, je to odolné proti šťourání třeba přes reflexi ? To nevím, to se ptám.
Bavíme se čistě hypoteticky, takže: umím si představit, že by se pro určitý kód dala reflexe zakázat. A taky by třeba přístup k okolnímu světu šel jenom přes nějaký proxy-objekt, takže by se snadno dalo dokázat, co plugin opravdu může a co ne...

V cloudech se přesunuje celý běžící VM mezi fyzickými stroji, mají na to udělátor třeba ve VMWare.
No právě - a to je děsně těžkopádný.

nejake_jmeno

Re:Proč je Java pomalá a problémová?
« Odpověď #133 kdy: 18. 12. 2013, 16:25:11 »


Jedině si vzít nějakou kategorii aplikací, kde se vyskytují aplikace obojího druhu – samozřejmě s tou výhradou, že závěry nebude možné aplikovat na jiné druhy aplikací. Třeba by se takhle mohly porovnat webové servery – Apache, Nginx, IIS, Jetty, Tomcat, něco postaveného na Netty (třeba server Avastu). I v téhle kategorii je každý určený na něco jiného, ale určité srovnání by se udělat dalo.
Citace
Přesně tam myslím ta debata předtím směřovala: "ukažte mi aplikace v oblasti XY, které se prosadily".

Jetty, Tomcat, Weblogic, Websphere, Gigaspaces
Hadoop (HDFS, HBase, Pig, Zookeeper atd.)
Eclipse, Vp-UML, SQL Developer, Protege

Pavel Tisnovsky

Re:Proč je Java pomalá a problémová?
« Odpověď #134 kdy: 18. 12. 2013, 16:27:05 »
konkrétní plugin má právo udělat operace X,Y,Z, jiný X,Y a jiný Y,Z
Nebo právě různé ty klaudové skopičiny - třeba snadnější migrace běžících procesů by se určitě hodila, dneska se to řeší buď celkem krkolomně, nebo neřeší vůbec...

A opravdu to tak funguje spolehlivě, je to odolné proti šťourání třeba přes reflexi ? To nevím, to se ptám.

V cloudech se přesunuje celý běžící VM mezi fyzickými stroji, mají na to udělátor třeba ve VMWare.

Reflexi lze taktez pres policy zakazat, bud vsude, pro archiv, balicek, tridu... Samozrejme muze byt v security modelu chyba, to se nedavno nekolikrat stalo, ale opravuje se to docela rychle (i kdyz spoluprace Oracle s komunitou je v tomto ohledu dost mizerna).