it-swarm-eu.dev

Proč lidé stále říkají Java je pomalý?

SO a na jiných místech Java má dlouhou dobu pověst pomalého. Od vtipy do mnoho komentářů v otázkách a odpovědích lidé stále věří, že Java je pomalý pouze na základě zkušeností s ním v 90. letech.

Toto je můj problém: máme vyvráceno (většinu) důvodů, proč lidé věří, že Java je pomalý. Mimo malých věcí je Java docela rychlý.

Proč tedy lidé stále odmítají uvěřit, že Java je nyní rychlý? Je součástí jejich myšlení, že něco, co není C/C++, je pomalé? Je to proto, že se lidé časem nekontrolují? Je to proto, že lidé jsou zkreslení?

61
TheLQ

Jsou to aplikace. Jak si všimnete, my jsme znovu a znovu dokázali, že ve vymyšlených scénářích Java kód se může setkat nebo dokonce porazit výkon takzvané „performanční“ jazyky, jako jsou C, C++, LISP, VB6 nebo JavaScript. A když budou předloženi s takovými důkazy, většina hanebných, otevřeně mířících oponentů se bude hanbit a slibovat, že už nikdy nebudou takovou pomluvu šířit.

... ale poté vypálí Eclipse nebo NetBeans nebo Guiffy, nebo povolí v prohlížeči jejich podporu Java), nebo se pokusí spustit aplikaci na svém oblíbeném telefonu. A čekají aby to reagovalo ...

... a počkejte ...

... a počkejte ...



... a počkejte ...







... a počkejte ...











...a...




... co jsem slíbil, že už nikdy nebudu dělat? Promiň, musela jsem ustoupit ...

131
Shog9

Tato otázka funguje ve falešných prostorách: kde se počítá, Java je stále pomalá. Tam, kde se počítá, jsou algoritmy náročné na výpočet na velkých souborech dat. Je pravda, že tyto mohou být optimalizovány, někdy na stejné úrovni jako C/C++ kód, ale pouze za cenu modularity a obecnosti. Efektivní kód C++ lze navrhnout tak, aby byl obecný a použitelný jako univerzální knihovna. Java kód nelze. Stačí se podívat na značně optimalizovaný Array.sort metoda, která používá různé implementace pro všechny základní typy a jejíž varianta objektu je stále mnohem mnohem pomalejší než obecná C++ 'sort, protože tyto objekty musí dynamicky odesílat porovnání rovnosti.

Přiznané, právě včasné optimalizace prováděné motorem HotSpot mohou skutečně předpovědět cíl těchto virtuálních hovorů a pokusit se o vložení. Ale to je stále pomalejší než přímo inline volání, které je odesláno uvnitř metody C++ ’sort.

Můj bývalý kolega provedl srovnávací kritéria problému na obrovských souborech dat ( q - počítání gramů pomocí dynamických tvarů) s templátovanou implementací C++ a objektově orientované Java.) Java kód byl řádově pomalejší než kód C++).

Samozřejmě to porovnává jablka s pomeranči. Jde ale o to, že implementace Java) byla nejlepší možná implementace (z hlediska výkonu, vzhledem k míře modularity požadované pro knihovnu), a stejně tak implementace C++.

Data srovnávacích údajů bohužel nejsou volně dostupná, ale ostatní našli podobná čísla při porovnání režie abstrakce za běhu. Například Scott Meyers píše Efektivní STL o režii generické funkce qsort C:

Pokud jde o rychlost, C++ téměř vždy trápí qsort C. […] Za běhu, sort provádí inline volání na svou porovnávací funkci ... zatímco qsort volá svou porovnávací funkci přes ukazatel. […] Při mých testech na vektoru dvoulůžkových se [druh] rozběhl až o 670% rychleji ...

48
Konrad Rudolph

Protože je to pomalé ... v některých aplikacích. Desktopové aplikace musí od začátku reagovat a režijní náklady se počítají jako pomalé.

Na druhou stranu, pokud provozujete server, nezáleží na tom, zda dojde k nějakému vytápění (analýza a kompilace JIT) - uděláte to jednou v modrém měsíci, takže většinu času nelze považovat za úplně pomalý.

28

Řekl bych, že je to proto, že když se lidé poprvé setkali, bylo to pomalé. Na základě toho vytvořili dojem. Tento dojem se pravděpodobně nezmění, pokud jej nepoužívají, a kvůli tomuto dojmu ho nepoužívají - je to začarovaný cyklus.

Musím připustit, měl jsem dojem, že Java byl pomalý, a ano, to bylo z mého předchozího vystavení tomu. Nyní jsem se přestěhoval do různých jazyků a měl extrémně omezené vystavení Java od té doby. Můj názor se proto příliš nezměnil).

21
Damovisa

Protože změna generace lidí na produktu vyžaduje generaci

Nemá to nic společného s tím, jak rychle Java se stává. V myslích lidí Java je identifikátor konstanty asociovaný se slovem „pomalý“). nebo Oracle s tím může dělat.

Jen buďte rádi, že Oracle nezničil programovací kulturu Java (zatím)) tím, že udělá cokoli vyrážka nebo hloupost . Stejně jako účtování nadměrných licenčních nákladů za použití. Nebo žalovat lidé na základě softwarových patentů dříve vlastněných společností Sun. :: sigh ::

Nesnáším, když jsem tu naysayer, ale pokud Oracle a Google nevyrovnají Java boj za pěkných podmínek) nebo pokud je Google nucena koupit Java a učinit z toho „správná“ platforma s otevřeným zdrojovým kódem, Java je na dobré cestě k tomu, aby byl dítě na hřišti, které má vši. IE, nikdo se ho nebude chtít dotknout 20ti stopovým sloupem).

Poznámka: Jen aby bylo jasné, když řeknu generaci, mluvím v lidech, nikoli v počítačových podmínkách. IE, dokud lidé, kteří zastávají toto vnímání, zemřou ve stáří nebo nahrazeni mladší generací, bude toto vnímání pravdivé. Přemýšlejte, pokud jde o 5 desetiletí, ne 5 let.

16
Evan Plaice

Jedním z důvodů je to lidé věří tomu, co říkají jiní, místo toho, co vidí.

Podle toho, co mi bylo řečeno, když jsem poprvé začal programovat, Java je „pomalejší“ než C++ a důvod, proč lze použít Java je, protože je to „pohodlné a jednodušší. “Velmi běžně se věří, že Java přináší bezpečnost a pohodlí za cenu výkonu. I když později je vynalezen C #, lidé věří, že je rychlejší než Java protože je to „nativní“.

Ale pravda, kterou lidé vidí, aniž by to vycítili, je, že Eclipse, IDE, které je postaveno s Javou, je absolutně nejrychlejší IDE ve třídě). používal téměř všechny hlavní toky IDE, ty z MS a GNU, Borland ..., Eclipse je absolutní král IDE, hlavně kvůli jeho rychlosti.

Dalším důvodem je jeho dlouhý čas spuštění.

Java není vhodná pro vývoj malé aplikace, která zůstane v systémové liště, spotřebovává trochu paměti, vyskakovací dialogové okno, které vám připomene přestávku; nebo poznámkový blok, který používáte k otevření textového souboru, jeho přečtení a uzavření. Měl by být používán na něčem BIG, jako je webový server, který je vždy k dispozici, optimalizuje využití výpočetního zdroje, reaguje na miliony požadavků každou hodinu. Nebo IDE jako Eclipse, které spravují tisíce souborů pracovního prostoru. Nevíte, že Java aplikace je rychlá, dokud nebude spuštěna alespoň několik hodin, Věřím.

11
tactoth

@bigown „Proč lidé stále říkají Java je pomalý?“)

Protože jsou hloupí. Protože nemají žádné pracovní zkušenosti, ale myslí si, že jsou živou inkarnací Dikjstry nebo druhým příchodem Linuse Torvalda, oh, nevím. Důvody pro vyslovení takové retardované věci jsou tolik, ale obvykle za nimi stojí hloupost, bezduchá subjektivní fanboyismus a emocionální pozornost.

Pojďme to napravit, abyste viděli pravdu o tom, co jsem právě řekl výše:

Zaprvé, co je pomalé, v jakém kontextu, za jakých, za jakých podmínek, s jakým technickým/vědeckým/obchodním účelem (tj. pokud to naštve, není jedním z nich). X je pomalý "pro jakoukoli technologii X, nebo jednoduše" X je Y ", kde Y je nějaký typ negativního tvrzení, aniž by odpovídal na některou z výše uvedených otázek, měl by být odmítnut jako blázen. Taková tvrzení nemají místo ve strojírenství. V politice a mladistvých chatovacích místnostech možná, ale ne na strojírenství.

Za druhé, většina z těchto zavádějících bláznů křičí o tom, že Java je pomalý, protože ZOMG, jejich Eclipse trvá věčně, než se rozhoří) (gee, načtěte věc se všemi pluginy a hádejte, co se stane.) Most těchto bláznů ani neví, jak naladit jvm, aby Eclipse fungoval rychle (nebo pro jakoukoli aplikaci Java aplikace v této věci)). To znamená, že nemají ponětí o ladění výkonu, což je realita nejen pro Javu, ale pro jakýkoli netriviální systém, ať už jde o hardware nebo software. Takže právě tam se odzbrojují kvůli jakékoli technické platnosti při vytváření takových bezduchých prohlášení.

Zatřetí, podívejme se, co je hlavní část Java vývoj je pro: back end OLTP; monitorovací systémy jsou na druhém místě). Oba typy systémů jsou určeny k spouštět v klastrech a běžet nepřetržitě týdny, ne-li měsíce. Záleží na tom, pak se vaše malá aplikace Eclipse nebo hračka načte jednu nebo dvě minuty, pokud je účel REAL Java aplikace je běžet delší dobu? Kontext, lidé, kontext.

Nakonec páteř OLTP na Google a Ebay běží na Javě.) To bych si vzala jako důkaz protikladem, že Java není pomalý (alespoň pro podmínky, na kterých záleží, nikoli pro malé experimenty s hračkami, měřítka a neověřitelné neoficiální důkazy provedené speciálně za účelem vyjádření slova „Xe je pomalá, to naštve“.

Existuje inženýrství a existuje fanboyismus. Hádejte, do jakých prohlášení o kategoriích tito patří?

8
luis.espinal

Protože to je, můžeme toto téma uzavřít jednou a navždy?

https://days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf [přejděte dolů k tabulkám, Java je 3,7 -12,6krát pomalejší než C++, průzkum zaměstnanců Google]

P.S .: Pokud tomu tak není, pojmenujte mi alespoň jednu snappy Java aplikace pro začátek, kterou jste dosud neviděli).

8
Coder

Pomalu ve srovnání s čím? Přemýšlím o přechodu z obyčejného Ruby na JRuby (Ruby na bázi Java)), protože jsem slyšel, že je rychlejší.

6
Andrew Grimm

Názory jsou názory a fakta jsou fakta.

Tady je fakt z kódu Google Jam, který pravděpodobně programátorům pomůže vyřešit náročné výpočetní problémy v krátkém časovém období, což znamená, že výkon jazyka, který používají, hraje důležitou roli:

Během minulých vydání (2009, 2010, 2011) přibližně 75% programátorů, kteří dorazili do závěrečných kol, používali C++, na rozdíl od přibližně 15% pomocí Java.

Zdroj -> http://www.go-hero.net/jam/

6
Daniel Scocco

TMHO, je to kvůli času potřebnému ke spuštění VM v prohlížeči. Pokud se aplikace spustí pomalu, lidé si to budou pamatovat jen proto, protože dlouhý počáteční čas je opravdu nepříjemný. Opravdu. Jeden mého spolupracovníka mi řekl, že Firefox nepoužívá, protože je příliš pomalý. (?!?). Ale, Ano, ok, na Windows, Firefox zabere spoustu času, než se objeví. Podle něj tato aplikace je pomalá, vzpomněl si na její obecnou rychlost.

6
Pierre Watelet

V roce 1997 jsem použil HP Vectra VE (200 MHz) a Windows 95. Většina aplikací na tom běžela velmi rychle, ale pak jsem vyzkoušel několik aplikací napsaných v Java (IDEs, pokud si vzpomínám správně) Byly velmi pomalé, přinejmenším jejich části GUI. Začaly dlouho, a prvky GUI (např. Nabídky) nebyly příliš citlivé - došlo ke zpoždění vizuální zpětné vazby. Také od Java GUI aplikace měly (mají) poměrně výrazný vzhled, naučil jsem se spojovat tento vzhled (a Java) se špatným výkonem.

4
Andreas Rejbrand

Záleží na tom, co myslíte jako pomalý.

Nejprve ze všeho Java), jak se v poslední době hodně pokročilo a ve většině případů je velmi rychlý.

  • Java je při spuštění pomalá, protože musíte před zahájením čehokoliv načíst JVM.
  • Některé funkce zabezpečení mohou v některých případech zabíjet výkony. Příkladem je vázaná kontrola s náhodným přístupem.
  • Udělejte něco opravdu rychlého v Java vyžadují práci proti JVM (abyste například mohli využít linku mezipaměti)).
  • Nedostatek metaprogramování znamená penalizaci za běhu s každou abstrakcí, takže výkon v mnoha případech stojí za náklady na design.
  • Java nemůže stěží zajistit omezení v reálném čase - záměrně - a někteří lidé by to mohli považovat za „pomalý“.

Mimochodem, Java je v některých případech rychlejší než Vanilla C/C++. Ale jazyky thoses vám poskytují nástroje k vylepšení.

Java je programovací jazyk zaměřený na produktivitu. Nyní je pro většinu aplikací dostatečně rychlý, ale pro některé jiné nestačí.

Obecně je pomalost Java nadměrně používaným argumentem, protože ve většině případů je neodvolatelná.

4
deadalnix

Jednoduchý, kanonický Java kód má tendenci být srovnatelný s nebo rychlejší než jednoduchý, kanonický C/C++/D kód. Jednoduchý, kanonický kód má tendenci provádět zbytečně mnoho alokací paměti, a to zejména naladěno na jakoukoli architekturu CPU, nemá na to tuny optimalizací na nízké úrovni atd. Java HotSpot GC není nic jiného než úžasné a optimalizace VM optimalizace) bývají lepší než statický kompilátor mohl udělat.

Na druhou stranu, pokud opravd potřebujete výkon a jste ochotni ručně naladit věci, abyste to dosáhli, C/C++/D nabízí mnohem více příležitostí. V Java nelze použít inline assembler. Nemůžete použít špinavé triky s triky k léčbě čísel s pohyblivou desetinnou čárkou jako sady bitů. Nemůžete použít vlastní schémata správy paměti, která mohou být v konkrétním případě použití rychlejší než GC. V zásobníku Java jako v C/C++/D) nemůžete přidělit téměř tolik. V Java jediný způsob, jak získat něco zhruba ekvivalentního funkce vyššího řádu jsou s rozhraními a vazbami za běhu. V D a (myslím, opravte mě, jestli se mýlím) C++, můžete předat funkce šablonům, což umožňuje, aby k vazbě došlo v době kompilace bez ztráty flexibility.

2
dsimcha

Dalším bodem „zpomalení“ Java je 64bitová runtime).

Slyšel jsem, že si někteří lidé stěžují, že Java je pro ně na 64bitových počítačích velmi pomalý). Jak se ukazuje, 64bit Java runtime používá server JVM, který před spuštěním kompiluje celý program.

ZDE je vysvětlení, proč 64bit VM začíná pomaleji).

Například na Windows:

C:\> Java -version  
Java version "1.6.0_21"  
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)  
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b16, mixed mode)  
1
AndrejaKo

Když hodím do bezcenné mince, zjistím, že Java webapps mají obecně dlouhé spouštěcí a odezvové časy, kde se mi zdá, že Python nebo Ruby by to udělal lépe.

Eclipse používám pro většinu svého programování a musím říci, že Java je stejně rychle jako cokoli jiného, ​​ne-li rychlejší lokální spuštění a „samostatný“).

0
thomas

Výkon Java je však velmi subjektivní, vnímání proč Java je pomalé) je většinou z důvodů, které si ostatní všimli: většina lidí vnímá něco, co je barevné podle jejich dřívějších zkušeností s tím a Java nebyl vždycky dobře optimalizovaný jazyk pod kapotou.) Vanilla Eclipse není zrovna rychlá IDE pracovat s a bledne, pokud jde o citlivost, ve srovnání s IDE jako Visual Studio).

To však znamená, že mimo problémy s uživatelským rozhraním, které Java má při spuštění, je to dost rychlé pro většinu aplikací. Pokud prohledáváte, najdete články, které jej porovnávají s ostatními) jazyky a většina prezentovaných výsledků ji zařadí do rozsahu, ve kterém to bude problém, pouze pokud se zabýváte hlavními soubory dat.

V oblasti bioinformatiky se používá trochu, protože je dobře podporován a existuje již instalační základna, jednou z výhod, které Java má, je, že můžete udělat poměrně rychlý vývoj pomocí to, že nemůžete dělat s C. Pokud se podíváte na jazyky používané pro bioinformatiku (já osobně používám R, Python a Java= pravidelně), všimnete si, že žádný z nich není přesně nejrychlejší a není neobvyklé, že se datové soubory v bioinformatice dostanou do 100 gigabajtů informací. Na konci dne je lidský čas stále cennější a zatímco rozdíly v rychlosti jsou patrné, velikost datových souborů bývají dostatečně velké, aby i tak přes noc běžely.

Pokud by bylo snazší napsat úhledné uživatelské rozhraní v Java), je docela podobné, že by vnímání rychlosti kleslo z radaru, protože většina lidí netlačí jazyky natolik, že rychlost je každodenní problém základ.

0
rjzii