it-swarm-eu.dev

Warum sagen die Leute immer noch Java ist langsam?

Lange Zeit hat SO und an anderen Orten Java den Ruf, langsam zu sein. Von Witze bis viele Kommentare in Fragen und Antworten glauben die Leute immer noch, dass Java langsam ist, allein aufgrund der Erfahrung damit in den 90ern.

Dies ist mein Problem: Wir haben widerlegt (die meisten) Gründe, aus denen die Leute glauben, dass Java langsam ist. Außerhalb kleiner Dinge ist Java ziemlich schnell.

Warum weigern sich die Leute immer noch zu glauben, dassJava jetzt schnell ist? Ist es Teil ihrer Denkweise, dass alles, was nicht C/C++ ist, langsam ist? Liegt es daran, dass die Leute nicht im Laufe der Zeit nachsehen? Liegt es daran, dass die Leute nur voreingenommen sind?

61
TheLQ

Es sind die Anwendungen. Wie Sie bemerken, haben wir haben immer wieder bewiesen, dass in erfundenen Szenarien Java Code die Leistung von erfüllen oder sogar schlagen kann sogenannte "performante" Sprachen wie C, C++, LISP, VB6 oder JavaScript. Und wenn solche Beweise vorgelegt werden, werden die meisten vernünftigen, aufgeschlossenen Gegner beschämt den Kopf hängen lassen und versprechen, nie wieder solche Verleumdungen zu verbreiten.

... aber dann starten sie Eclipse, NetBeans oder Guiffy oder aktivieren die Unterstützung von Java in ihrem Browser) oder versuchen, eine App auf ihrem bevorzugten Feature-Telefon auszuführen. Und sie warten damit es reagiert ...

...und warte...

...und warte...



...und warte...







...und warte...











...und...




... was habe ich versprochen, nie wieder zu tun? Entschuldigung, muss eingeschlafen sein ...

131
Shog9

Diese Frage funktioniert unter falschen Voraussetzungen: Wo es zählt, Java ist immer noch langsam. Wo es zählt, sind rechenintensive Algorithmen für große Datenmengen. Zugegeben, diese können optimiert werden, manchmal um mit C/C++ - Code gleichzusetzen, aber nur auf Kosten von Modularität und Generizität. Effizienter C++ - Code kann generisch gestaltet und als Allzweckbibliothek verwendet werden. Java Code kann nicht. Schauen Sie sich nur die stark optimierte Array.sort Methode an, die für alle grundlegenden Typen unterschiedliche Implementierungen verwendet und deren Objektvariante noch viel langsamer als C++ 'generisches sort, da diese Objekte Gleichheitsvergleiche dynamisch auslösen müssen.

Zugegeben, Just-in-Time-Optimierungen, wie sie von der HotSpot-Engine durchgeführt werden, können das Ziel dieser virtuellen Aufrufe tatsächlich vorhersagen und Inlining versuchen. Dies ist jedoch immer noch langsamer als der direkt eingebettete Aufruf, der innerhalb der C++ - Methode sort gesendet wird.

Ein ehemaliger Kollege von mir hat vergleichende Benchmarks für ein Problem mit großen Datenmengen ( q - Grammzählung mit dynamischen Formen) mit einer C++ - Templatimplementierung und einem durchgeführt objektorientierte Java Implementierung. Der Java Code war um Größenordnungen langsamer als der C++ - Code.

Natürlich werden hier Äpfel mit Orangen verglichen. Der Punkt ist jedoch, dass die Java -Implementierung die bestmögliche Implementierung war (in Bezug auf die Leistung angesichts des für eine Bibliothek erforderlichen Modularitätsgrads), ebenso wie die C++ - Implementierung.

Leider sind die Benchmark-Daten nicht frei verfügbar, aber andere haben beim Vergleich des Overheads der Laufzeitabstraktion ähnliche Zahlen gefunden. Zum Beispiel schreibt Scott Meyers in Effective STL über den Overhead der generischen qsort -Funktion von C:

Die Sortierung von C++ bringt Cs Qsort praktisch immer in Verlegenheit, wenn es um Geschwindigkeit geht. […] Zur Laufzeit ruft sort seine Vergleichsfunktion inline auf… während qsort seine Vergleichsfunktion über einen Zeiger aufruft. […] In meinen Tests mit einem Vektor von einer Million Doppel lief [sort] bis zu 670% schneller…

48
Konrad Rudolph

Weil es langsam ist ... in einigen Anwendungen. Desktop-Anwendungen müssen von Anfang an reagieren, und der Startaufwand gilt als langsam.

Wenn Sie dagegen einen Server betreiben, spielt es keine Rolle, ob es eine Erwärmung gibt (JIT-Analyse und -Kompilierung) - Sie tun dies einmal in Blue Moon, sodass es die meiste Zeit nicht als ganz langsam angesehen werden kann.

28

Ich würde sagen, es liegt daran, dass es langsam war, als die Leute es zum ersten Mal sahen. Darauf aufbauend machten sie einen Eindruck davon. Es ist unwahrscheinlich, dass sich dieser Eindruck ändert, wenn sie ihn nicht verwenden, und sie verwenden ihn aufgrund dieses Eindrucks nicht - es ist ein Teufelskreis.

Ich muss zugeben, ich hatte den Eindruck, dass Java war langsam, und ja, das war von meiner vorherigen Exposition gegenüber. Ich bin jetzt zu verschiedenen Sprachen übergegangen und hatte extrem begrenzte Exposition gegenüber Java seitdem. Folglich hat sich meine Meinung nicht viel geändert.

21
Damovisa

Weil es eine Generation braucht, um die Wahrnehmung der Menschen über ein Produkt zu ändern

Es hat nichts damit zu tun, wie schnell Java wird. In den Köpfen der Menschen Java ist eine konstante Kennung, die mit dem Wort 'langsam' verbunden ist. Es gibt wenig, nichts, was Sie oder Oracle kann dagegen vorgehen.

Seien Sie einfach froh, dass Oracle die Java Programmierkultur (noch)) nicht durch irgendetwas zerstört hat vorschnell oder dumm . Als ob Sie übermäßige Lizenzkosten für die Verwendung verlangen. Oder klagen Personen, die auf Softwarepatenten basieren, die zuvor Sun. :: seufzen :: gehörten

Ich hasse es, hier der Neinsager zu sein, aber es sei denn, Oracle und Google regeln den Java Kampf zu netten Bedingungen, oder Google ist gezwungen, Java zu kaufen und macht es zu einem 'richtige' Open-Source-Plattform, Java ist auf dem besten Weg, das Kind auf dem Spielplatz zu sein, das Läuse hat. IE, niemand wird es mit einer 20-Fuß-Stange berühren wollen.

Hinweis: Um ganz klar zu sein, wenn ich Generation sage, spreche ich in Menschenbegriffen, nicht in Computerbegriffen. IE, bis die Menschen, die diese Wahrnehmung vertreten, an Altersschwäche sterben oder durch eine jüngere Generation ersetzt werden, gilt die Wahrnehmung. Denken Sie in 5 Jahrzehnten, nicht in 5 Jahren.

16
Evan Plaice

Ein Grund ist, dass die Leute vertrauen darauf, was andere sagen, anstatt was sie sehen.

Nach dem, was mir zu Beginn der Programmierung gesagt wurde, ist Java ist "langsamer" als C++, und der Grund, warum Java könnte verwendet werden, liegt darin, dass es "bequem und" ist) einfacher ". Es wird allgemein angenommen, dass Java Sicherheit und Komfort auf Kosten der Leistung bringt. Selbst wenn später C # erfunden wird, glauben die Leute, dass es schneller ist als Java weil es "native" ist.

Aber die Wahrheit, die die Leute sehen, ohne es zu spüren, ist, dass Eclipse, die IDE, die mit Java erstellt wurde, absolut die SCHNELLSTE IDE in der Klasse ist. Ich habe) verwendet fast alle Hauptstrom-IDEs, die von MS und GNU, Borland ..., Eclipse ist der absolute König der IDEs, vor allem wegen seiner Schnelligkeit.

Ein weiterer Grund ist seine lange Startzeit.

Java eignet sich nicht für die Entwicklung einer winzigen App, die in der Taskleiste verbleibt, wenig Speicherplatz beansprucht und einen Dialog öffnet, der Sie an eine Pause erinnert. oder einen Notizblock, mit dem Sie eine Textdatei öffnen, lesen und schließen. Es sollte auf etwas GROSSEM verwendet werden, wie einem Webserver, der immer da ist, Ihre Computerressourcen optimal nutzt und jede Stunde auf Millionen von Anfragen reagiert. Oder eine IDE wie Eclipse, die Tausende von Arbeitsbereichsdateien verwaltet. Sie wissen nicht, dass Sie Java App ist schnell, bis sie mindestens mehrere Stunden lang ausgeführt wurde, Ich glaube.

11
tactoth

@bigown "Warum sagen die Leute immer noch Java ist langsam?"

Weil sie dumm sind. Weil sie keine Berufserfahrung haben, aber denken, dass sie die lebendige Inkarnation von Dikjstra oder das zweite Kommen von Linus Torvald sind, oh ich weiß nicht. Die Gründe, so etwas Verzögertes zu sagen, sind so viele, aber normalerweise scheinen Dummheit, sinnloser subjektiver Fanboyismus und emotionale Aufmerksamkeits-Hure dahinter zu stehen.

Lassen Sie uns dies analysieren, damit Sie die Wahrheit dessen sehen können, was ich gerade oben gesagt habe:

Erstens, was langsam ist, in welchem ​​Kontext, für was, unter welchen Bedingungen, mit welchem ​​technischen/wissenschaftlichen/geschäftlichen Zweck (um zu sagen tehe es ist scheiße ist keiner von ihnen.) Jede Person, die sagt " X ist langsam "für jede Technologie X oder einfach" X ist Y ", wobei Y eine Art negative Aussage ist, ohne eine der oben genannten Fragen zu beantworten, sollte als Dummkopf abgetan werden. Solche Aussagen haben keinen Platz im Engineering. In der Politik und in jugendlichen Chatrooms vielleicht, aber nicht im Ingenieurwesen.

Zweitens weinen die meisten dieser fehlgeleiteten Dummköpfe darüber, dass Java ist langsam, weil ZOMG, ihre Eclipse ewig dauert, um hochzufahren (gee, lade das Ding mit allen Plug-Ins und rate, was passiert) Von diesen Dummköpfen wissen sie nicht einmal, wie sie das JVM so einstellen müssen, dass Eclipse schnell funktioniert (oder für jede Java -Anwendung)). Das heißt, sie haben keine Ahnung von der Leistungsoptimierung, die ist eine Realität nicht nur für Java, sondern für jedes nicht triviale System, sei es Hardware oder Software. Genau dort entwaffnen sie sich für jede technische Gültigkeit, wenn sie solche sinnlosen Aussagen machen.

Drittens betrachten wir, wofür der Großteil der Java - Entwicklung bestimmt ist: Backend OLTP in erster Linie; Überwachungssysteme kommen an zweiter Stelle. Beide Systemtypen sind dafür vorgesehen Laufen Sie in Clustern und laufen Sie wochen- oder monatelang ohne Unterbrechung. Ist es dann wirklich wichtig, dass das Laden Ihrer kleinen Eclipse- oder Spielzeug-App ein oder zwei Minuten dauert, wenn der Zweck von REAL Java Apps ist) für längere Zeiträume laufen? Kontext, Menschen, Kontext.

Schließlich läuft das Rückgrat von OLTP bei Google und Ebay unter Java. Ich würde das als Beweis für den Widerspruch nehmen, dass Java nicht langsam ist (zumindest für) Bedingungen, die wichtig sind, nicht für kleine Spielzeugexperimente, Benchmarks und nicht überprüfbare annekdotische Beweise, die speziell für den Zweck gemacht wurden, zu sagen: "Das X ist langsam, es ist scheiße."

Es gibt Technik und Fanboyismus. Ratet mal, zu welcher Kategorie Aussagen wie diese gehören?

8
luis.espinal

Können wir dieses Thema ein für alle Mal schließen?

https://days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf [zu Tabellen scrollen, Java ist 3.7 -12,6-mal langsamer als C++, Untersuchungen von Google-Mitarbeitern]

P.: Wenn nicht, nennen Sie mir mindestens eine bissige Java App für den Anfang, habe noch keine gesehen.

8
Coder

Langsam im Vergleich zu was? Ich denke darüber nach, von gewöhnlichem Ruby zu JRuby (Java-basiertes Ruby)) zu wechseln, weil ich gehört habe, dass es schneller ist.

6
Andrew Grimm

Meinungen sind Meinungen und Fakten sind Fakten.

Hier ist eine Tatsache aus dem Google Code Jam, die Programmierer wohl herausfordert, schwierige Computerprobleme in kurzer Zeit zu lösen, was bedeutet, dass die Leistung der von ihnen verwendeten Sprache eine wichtige Rolle spielt:

In den vergangenen Ausgaben (2009, 2010, 2011) verwendeten rund 75% der Programmierer, die zu den letzten Runden kamen, C++, im Gegensatz zu rund 15% mit Java.

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

6
Daniel Scocco

TMHO, dies liegt an der Zeit, die zum Starten von VM im Browser) benötigt wird. Wenn eine Anwendung langsam gestartet wird, werden sich die Benutzer nur daran erinnern. Denn lange Startzeiten sind wirklich ärgerlich. Wirklich von meinem Kollegen sagte mir, dass er Firefox nicht benutzt, weil es zu langsam ist. (?!?). Aber ja, ok, unter Windows braucht Firefox sehr viel Zeit, um aufzutauchen. Diese App ist langsam, er hat sich über die allgemeine Geschwindigkeit Gedanken gemacht.

6
Pierre Watelet

Um 1997 habe ich ein HP Vectra VE (200 MHz) und Windows 95 verwendet. Die meisten Anwendungen liefen sehr schnell, aber dann habe ich einige Anwendungen ausprobiert, die in Java (IDEs, wenn ich mich richtig erinnere) geschrieben wurden ). Sie waren sehr langsam, zumindest die GUI-Teile von ihnen. Der Start dauerte lange, und die GUI-Elemente (z. B. Menüs) reagierten nicht sehr schnell - es gab Verzögerungen bei der visuellen Rückmeldung. Auch seit Java GUI-Anwendungen hatten (haben) ein ziemlich charakteristisches Aussehen, ich habe gelernt, dieses Aussehen (und Java) mit schlechter Leistung zu assoziieren.

4

Es kommt darauf an, was du als langsam meinst.

Zuallererst Java hat in letzter Zeit viele Fortschritte gemacht und ist in den meisten Fällen sehr schnell. Aber:

  • Java ist beim Start langsam, da Sie die JVM laden müssen, bevor Sie etwas tun können.
  • Einige Sicherheitsfunktionen können in einigen Fällen die Leistung beeinträchtigen. Ein Beispiel ist die gebundene Prüfung mit wahlfreiem Zugriff.
  • Machen Sie etwas sehr schnell in Java müssen gegen die JVM arbeiten (um beispielsweise die Cache-Zeile zu nutzen).
  • Das Fehlen einer Metaprogrammierung impliziert eine Strafe zur Laufzeit bei jeder Abstraktion, sodass die Leistung in vielen Fällen zu Lasten des Designs geht.
  • Java kann aufgrund des Designs kaum Echtzeitbeschränkungen gewährleisten, und dies könnte von einigen Leuten als "langsam" angesehen werden.

Übrigens, Java ist in einigen Fällen schneller als Vanilla C/C++. Aber diese Sprachen bieten Ihnen die Werkzeuge, um sie zu optimieren.

Java ist eine Programmiersprache, die auf Produktivität ausgerichtet ist. Jetzt ist es für die meisten Anwendungen schnell genug, für einige andere jedoch nicht.

Im Allgemeinen ist Javas Langsamkeit ein überstrapaziertes Argument, da es in den meisten Fällen irrelevant ist.

4
deadalnix

Einfacher, kanonischer Java Code ist in der Regel gleichwertig oder schneller als einfacher, kanonischer C/C++/D-Code. Einfacher, kanonischer Code führt in der Regel unnötig viele Speicherzuweisungen durch, nicht besonders Es ist auf jede CPU-Architektur abgestimmt, es werden nicht viele Optimierungen auf niedriger Ebene vorgenommen usw. Javas HotSpot GC ist geradezu erstaunlich, und die VM-Optimierungen sind in der Regel besser als ein statischer Compiler tun könnte.

Auf der anderen Seite bietet C/C++/D viel mehr Möglichkeiten, wenn Sie wirklich Leistung benötigen und bereit sind, Dinge von Hand abzustimmen, um sie zu erhalten. Sie können den Inline-Assembler in Java nicht verwenden. Sie können keine Punning-Tricks verwenden, um Gleitkommazahlen als Bit-Arrays zu behandeln. Sie können keine benutzerdefinierten Speicherverwaltungsschemata verwenden, die für Ihren speziellen Anwendungsfall möglicherweise schneller als der GC sind. Sie können in Java nicht annähernd so viel auf dem Stapel zuweisen wie in C/C++/D. In Java der einzige Weg, um etwas zu erhalten, das ungefähr gleichwertig ist) Funktionen höherer Ordnung sind mit Schnittstellen und Laufzeitbindung ausgestattet. In D und (ich glaube, korrigieren Sie mich, wenn ich falsch liege) C++ können Sie Funktionen an Vorlagen übergeben, sodass die Bindung zur Kompilierungszeit ohne Verlust an Flexibilität erfolgen kann.

2
dsimcha

Ein weiterer Punkt für "Langsamkeit" von Java ist die 64-Bit-Laufzeit.

Ich habe einige Leute beschweren hören, dass Java für sie auf 64-Bit-Computern sehr langsam ist. Wie sich herausstellt, verwendet 64bit Java Laufzeit verwendet Server-JVM, die das gesamte Programm vor dem Start kompiliert.

HIER ist eine Erklärung, warum 64bit VM langsamer startet.

Zum Beispiel unter 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

Um eine wertlose Münze zu werfen, finde ich, dass Java Webapps im Allgemeinen lange Start- und Antwortzeiten haben, wobei es mir so scheint, als ob Python oder Ruby dies getan hätten besser.

Ich benutze Eclipse für den größten Teil meiner Programmierung, und ich muss sagen, dass Java genauso schnell ist wie alles andere, wenn nicht schneller lokal und "eigenständig".

0
thomas

Die Leistung von Java ist sehr subjektiv, die Wahrnehmung, warum Java ist langsam), beruht hauptsächlich auf Gründen, die andere bemerkt haben: Die Wahrnehmung von etwas durch die meisten Menschen ist farbig Aufgrund ihrer früheren Erfahrungen damit und Java war nicht immer eine gut optimierte Sprache unter der Haube. Ebenso ist Vanilla Eclipse nicht gerade eine schnelle IDE) im Vergleich zu einem IDE wie Visual Studio) mit zu arbeiten und in Bezug auf die Reaktionsfähigkeit verblasst.

Abgesehen von den Problemen mit der Benutzeroberfläche, die Java beim Start hat), ist es für die meisten Anwendungen schnell genug. Wenn Sie suchen, finden Sie Artikel, die es mit anderen vergleichen Sprachen und die meisten der vorgestellten Ergebnisse bringen es in den Bereich, in dem es nur dann ein Problem darstellt, wenn Sie mit wichtigen Datensätzen arbeiten.

Im Bereich der Bioinformatik wird es häufig verwendet, da es gut unterstützt wird und es bereits eine Installationsbasis gibt. Einer der Vorteile von Java hat, dass Sie eine ziemlich schnelle Entwicklung durchführen können Wenn Sie sich die für die Bioinformatik verwendeten Sprachen ansehen (ich persönlich verwende R, Python und Java regelmäßig)), werden Sie feststellen, dass keine von ihnen genau die ist am schnellsten und es ist nicht ungewöhnlich, dass die Datensätze in der Bioinformatik auf Hunderte von Gigabyte an Informationen stoßen. Letztendlich ist die menschliche Zeit immer noch wertvoller und während die Geschwindigkeitsunterschiede spürbar sind, ist die Größe der Datensätze neigen dazu, groß genug zu sein, dass sie sowieso über Nacht laufen.

Wenn es einfacher wäre, eine bissige Benutzeroberfläche in Java) zu schreiben, würde die Geschwindigkeitswahrnehmung vom Radar fallen, da die meisten Leute Sprachen nicht genug pushen, so dass Geschwindigkeit wirklich ein tägliches Problem ist Basis.

0
rjzii