Warum sagen die Leute immer noch, Java sei langsam? [geschlossen]


61

Java hat in SO und an anderen Orten lange den Ruf, langsam zu sein. Von Witzen bis hin zu vielen Kommentaren in Fragen und Antworten glauben die Leute immer noch, dass Java langsam ist, allein aufgrund der Erfahrung mit Java in den 90ern.

Das ist mein Problem: Wir haben (die meisten) Gründe widerlegt, warum die Leute glauben, Java sei langsam. Abgesehen von kleinen Dingen ist Java ziemlich schnell.

Warum weigern sich die Leute, zu glauben, dass Java 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?


10
Umm, C # ist auch schnell;)
Evan Plaice

12
ähm, dieser Link widerlegt nicht, dass Java langsam ist.

13
Ich habe das Gefühl, dass Java nicht reagiert und nicht langsam ist.
Zneak

23
Aufgeblähte und schreckliche UI-Bibliotheken ..?
dmp

4
Weil JVM kein Teil des Kernels ist. Oh, vielleicht werden es in Zukunft einige Linux-Leute hinzufügen.
Xiè Jìléi

Antworten:


131

Es sind die Anwendungen. Wie Sie bemerken, haben wir immer wieder bewiesen, dass Java-Code in erfundenen Szenarien die Leistung sogenannter "performanter" Sprachen wie C, C ++, Lisp, VB6 oder JavaScript erreichen oder sogar übertreffen kann . Und wenn solche Beweise vorgelegt werden, werden die meisten vernünftigen, aufgeschlossenen Gegner beschämt den Kopf hängen lassen und versprechen, niemals wieder solche Verleumdungen zu verbreiten.

... aber dann starten sie Eclipse, NetBeans oder Guiffy oder aktivieren die Java-Unterstützung in ihrem Browser oder versuchen, eine App auf ihrem bevorzugten Feature-Phone auszuführen. Und sie warten darauf, dass es anspricht ...

... und warten ...

... und warten ...



... und warten ...







... und warten ...











... und ...




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


44
Selbst die einfachste Java-Benutzeroberfläche benötigt mindestens 1,5 Sekunden zum Starten. Das ist kein bisschen.
Peter Boughton

32
Ich hätte nie gedacht, dass Javascript eine "performante" Sprache ist.
Zneak

11
+1 für die Erwähnung von IDEs. Es gibt einen großen Unterschied zwischen der Reaktionsfähigkeit von Eclipse und einer IDE wie Visual Studio.
Mellowsoon

56
Ich habe Probleme damit. Firefox ist hauptsächlich in C ++ und langsam geschrieben. Bedeutet das, dass C ++ langsam ist? Nein, Firefox ist langsam. Zu sagen, dass eine Sprache langsam ist, weil das größte darin geschriebene Programm langsam ist, ist dumm.
TheLQ

13
Jonas macht mich mit dem einfachsten Beispiel, das ich finden kann, nicht zu einem schlechten Programmierer. Wenn Sie eine magische Methode haben, die eine Java-GUI in weniger als einem Augenblick ausführt, führen Sie sie vor .
Peter Boughton

48

Diese Frage funktioniert unter falschen Voraussetzungen: Wo es darauf ankommt, ist Java immer noch langsam. Wo es darauf ankommt, sind rechenintensive Algorithmen für große Datenmengen. Zugegeben, diese können optimiert werden, um manchmal mit C / C ++ - Code mithalten zu können, jedoch nur auf Kosten der Modularität und Generizität. Effizienter C ++ - Code kann so entworfen werden, dass er generisch ist und als universelle Bibliothek verwendet werden kann. Java-Code kann nicht. Schauen Sie sich nur die stark optimierte Array.sortMethode an, die für alle fundamentalen Typen unterschiedliche Implementierungen verwendet und deren Objektvariante immer noch viel langsamer ist als die von C ++, sortda diese Objekte Gleichheitsvergleiche dynamisch ausgeben müssen.

Zugegeben, Just-in-Time-Optimierungen, wie sie von der HotSpot-Engine durchgeführt werden, können das Ziel dieser virtuellen Anrufe vorhersagen und Inlining-Versuche durchführen. Dies ist jedoch immer noch langsamer als der direkt eingebundene Aufruf, der in der C ++ - sortMethode ausgelöst wird .

Ein ehemaliger Kollege von mir hat mit einer C ++ - Templatimplementierung und einer objektorientierten Java-Implementierung Vergleichstests für ein Problem mit großen Datenmengen ( Q- Gramm-Zählung unter Verwendung dynamischer Formen) durchgeführt. Der Java-Code war um Größenordnungen langsamer als der C ++ - Code.

Das ist natürlich ein Vergleich von Äpfeln mit Orangen. Der Punkt ist jedoch, dass die Java-Implementierung die bestmögliche Implementierung war (in Bezug auf die Leistung in Anbetracht des für eine Bibliothek erforderlichen Modularitätsgrades), und ebenso die C ++ - Implementierung.

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

C ++ 's Sortierung ist Cs qsort in Sachen Geschwindigkeit praktisch immer peinlich. […] 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 Doppelten lief [sort] bis zu 670% schneller…


6
Um fair zu sein, std::sortist einer der Fälle, in denen es schwierig ist, etwas Ähnliches in anderen Sprachen zu tun. Aber die überwiegende Mehrheit der Projekte, die ich gesehen habe, ist kein std::sortCode, der dem Schreiben ähnelt. Sie schreiben (schlechten) Java-Code in C ++ und beschweren sich über Probleme.
Billy ONeal

2
Haben Sie Berichte, um Ihre Geschichte zu sichern, dass große Datenmengen langsam sind? Ich habe gehört, wie Leute davon gesprochen haben, Operationen durchzuführen. 1-2 Millionen Eintrittslisten und es ist immer noch schnell. Und ist es nicht ein Nischenfeld, mit massiven Datenmengen im Speicher (normalerweise in einer Datenbank) herumzuspielen?
TheLQ

8
@TheLQ: Die Quelle ist das SeqAn-Buch von Gogol-Döring & Reinert. Und zu Ihrem Gegenbeispiel: Welche Operationen? Und was halten sie für „schnell“? Außerdem sind 1E6-Einträge nicht allzu groß. ;-) Und ob das ein Nischenfeld ist - sicher. Aber hier brauchen Sie schnelle Berechnungen. Der Punkt ist, ob Java schnell ist , nicht, ob es für kostengünstige Operationen „schnell genug“ ist. Bei einem ausreichend kleinen Datensatz ist alles schnell genug.
Konrad Rudolph

2
es gibt keine bestmögliche umsetzung
jeremy-george

3
@fonzo Es kann vernünftige Annäherungen geben. Scratch that, für einen ausreichend einfachen Algorithmus und eine genau definierte Metrik kann es eine bestmögliche Implementierung geben. Dies ist hier der Fall. Der Algorithmus ist einfach und es gibt einen genau definierten Fall, für den optimiert wurde: Laufzeit für eine bestimmte Eingabe.
Konrad Rudolph

28

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

Wenn Sie jedoch einen Server betreiben, spielt es keine Rolle, ob eine gewisse Erwärmung vorliegt (JIT-Analyse und -Kompilierung) - Sie führen diese einmal in Blue Moon aus, sodass sie die meiste Zeit nicht als vollständig langsam angesehen werden kann.


Startkosten sind ein Problem, aber Sie können es mit einigen Befehlszeilenschaltern optimieren
TheLQ

22
Wie viele Benutzer kennen sich tatsächlich mit Befehlszeilenoptionen aus?
Walter

17
TheLQ, wenn Sie einen Befehlszeilenschalter bereitstellen können, um die Startverzögerung von 1,5 s für Swing / AWT zu beseitigen, antworten Sie bitte wie folgt
Peter Boughton,

6
Und wie kann ich diese Befehlszeilenoptionen optimieren, um zu verhindern, dass der gesamte Browser für 5 Sekunden blockiert, wenn ich auf einen Link klicke, der ein Java-Objekt enthält? Das ist die Art von Sache, die Leute dazu bringt, Java langsam zu nennen, und es spielt keine Rolle, dass es, sobald es geladen ist, tatsächlich ziemlich schnell läuft.
Roman Starkov

21

Ich würde sagen, es ist so, weil es langsam war, als die Leute es zum ersten Mal erlebten. Darauf aufbauend haben sie sich einen Eindruck davon gemacht. 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 langsam war, und ja, das war aus meiner vorherigen Exposition. Ich bin jetzt zu verschiedenen Sprachen übergegangen und habe seitdem nur eine äußerst eingeschränkte Erfahrung mit Java. Folglich hat sich an meiner Meinung nicht viel geändert.


3
+1 - Ich stimme vollkommen zu. Ich hasste Java in seinen frühen Tagen. Das .NET Framework hat dem verwalteten Code wirklich geholfen: Ich mochte C # und schließlich auch Java.
Wizard79

7
Es dauert immer noch über eine Sekunde, um hallo Welt laufen zu lassen. Die Startzeit ist langsam.
Intuited

@intuited Versuchen Sie, einen Server über C ++ / C # oder in einer anderen Sprache zu erstellen. HECK versucht, ihn mit C zu erstellen, und vergleicht DANN mit JAVA. Die Sache mit C ist, dass es schnell ist, wenn Sie ein "Ma, ich habe 10 Zeilen C-Code geschrieben, der schneller ist als Java, aber Sie können ihn nicht lesen" -Typ. In dem Moment, in dem Ihr C-Code wächst, verlangsamt sich Ihre Geschwindigkeit;)
AceofSpades

16

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

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

Seien Sie einfach froh, dass Oracle die Java-Programmierkultur (noch) nicht zerstört hat, indem Sie etwas Unbesonnenes oder Dummes getan haben . Als würde man übermäßige Lizenzkosten erheben, um es zu nutzen. Oder Personen verklagen, die auf Softwarepatenten basieren, die zuvor im Besitz von Sun waren. ::Seufzer::

Ich hasse es, hier der Neinsager zu sein, aber wenn Oracle und Google den Java-Kampf nicht zu guten Konditionen beilegen oder Google gezwungen ist, Java zu kaufen und es zu einer "richtigen" Open-Source-Plattform zu machen, ist Java auf dem besten Weg, das Kind zu sein der Spielplatz, der Läuse hat. IE, niemand wird es mit einem 20ft Pol berühren wollen.

Hinweis: Nur um klar zu sein, wenn ich Generation sage, spreche ich in Begriffen von Menschen, nicht in Begriffen von Computern. IE, bis die Leute, die diese Vorstellung halten, vom Alter sterben oder durch eine jüngere Generation ersetzt werden, bleibt die Vorstellung zutreffend. Denken Sie in 5 Jahrzehnten und nicht in 5 Jahren.


2
Ich denke, dass Google so viel Java verwendet, dass der Kauf keine völlig undurchführbare Theorie ist. Ich würde wahrscheinlich glücklich damit sein.
Bart van Heukelom

1
@donroby: Und wen interessieren diese Sprachen? In zwei Jahrzehnten wird Java eine Nischensprache sein.
aasc

1
@aasc - Java könnte in zwei Jahrzehnten veraltet sein, aber LISP ist nicht jetzt und wird es nicht dann sein.
Don Roby

2
@aasc "Programmiersprachen leben normalerweise nicht mehr als eine Generation" Guter Gott, 1 Million Delphi-Entwickler, die Pascal sind, 5 Millionen Visual Basic-Entwickler, äh ... ganz zu schweigen von Perl, Lisp, Fortran, Cobol und C ++ eine Begründung für diesen Kommentar?
Reallyethical

2
@ Reallyethical Nicht im Mainstream. Wie viele Unternehmen sind von Lisp, Fortran, Cobol abhängig? Mit lisp ist es meistens in der akademischen Welt gefangen und wird als Modell für Features anderer Sprachen verwendet, nur wenige verwenden es für tatsächliche Produktionsprojekte. Fortran ist zu einer Nischensprache für mathematische Hochleistungsmodellierung geworden, und Cobol bleibt nur, weil die Bankenbranche zu ängstlich ist, ihren alten / zuverlässigen Code auf eine neue Plattform umzustellen. C ++ ist die eklatante Ausnahme, da es bis heute weit verbreitet ist und angewendet wird.
Evan Plaice

11

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

Nach dem, was mir gesagt wurde, als ich mit dem Programmieren anfing, ist Java "langsamer" als C ++, und der Grund, warum Java verwendet werden könnte, ist, dass es "bequem und einfacher" ist. 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 als Java ist, weil es "nativ" ist.

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

Ein weiterer Grund ist die lange Anlaufzeit .

Java ist nicht für die Entwicklung einer winzigen App geeignet, die in der Taskleiste verbleibt, wenig Speicherplatz beansprucht und ein Dialogfeld anzeigt, in dem Sie daran erinnert werden, eine Pause einzulegen. oder ein Notizblock, mit dem Sie eine Textdatei öffnen, lesen und schließen können. Es sollte auf einem BIG-Server verwendet werden, z. B. einem Webserver, der immer zur Verfügung steht, Ihre Computerressourcen optimal nutzt und auf Millionen von Anfragen pro Stunde reagiert. Oder eine IDE wie Eclipse, die Tausende von Arbeitsbereichsdateien verwaltet. Sie wissen nicht, dass Ihre Java-App schnell ist, bis sie mindestens mehrere Stunden gelaufen ist, glaube ich.


1
Ich sehe die ganze Zeit Langsamkeit.
aasc

28
Eclipse schnell? LMAO
finnw

2
@finnw - es ist, wenn Sie es tunen. Nach dem Auspacken und mit all den Plug-Ins wird es offensichtlich nicht schnell gehen. Natürlich kann es nie mit vim oder jedit oder Notepad ++ verglichen werden, aber diese "schnellen" oder "langsamen" Argumente und Anweisungen sind ohne Kontext bedeutungslos.
Luis.espinal

2
@ Luis kann man es jedoch mit Delphi 7 vergleichen, das meiner Meinung nach viel einfacher ist als Eclipse. Und Delphi 7 ist fast so schnell wie der Editor. Das ist verrückt.
Roman Starkov

4
@finnw, für eine IDE mit zig Millionen Plugins ist es ziemlich schnell :)

8

@bigown "Warum sagen die Leute immer noch, Java sei 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. Es gibt so viele Gründe, warum man so etwas Verspätetes sagt, aber normalerweise scheinen Dummheit, sinnloser subjektiver Fanboyismus und emotionale Aufmerksamkeitshure dahinter zu stehen.

Untersuchen wir dies, damit Sie die Wahrheit über das sehen können, was ich gerade gesagt habe:

Erstens, was ist langsam, in welchem Kontext, für das, was unter welchen Bedingungen, mit dem, was Technik / Wissenschaft / Geschäftszweck (zu sagen tehe saugt es ist nicht einer von ihnen.) Wer sagt , für jede Technologie „X langsam“ X oder einfach "X ist Y", wobei Y eine Art negative Aussage ist, ohne eine der obigen 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 in der Technik.

Zweitens weinen die meisten dieser fehlgeleiteten Dummköpfe darüber, dass Java langsam ist, weil ZOMG, ihre Sonnenfinsternis, ewig braucht, um hochzufahren (hey, lade das Ding mit all den Plug-Ins und rate, was passiert.). Die meisten dieser Dummköpfe wissen nicht einmal, wie um den JVM so zu optimieren, dass Eclipse schnell funktioniert (oder für jede andere Java-Anwendung). Das heißt, sie haben keine Ahnung von der Leistungsoptimierung, was nicht nur für Java, sondern für jedes nicht triviale System, sei es Hardware oder Software, Realität ist. Genau dort entschärfen sie sich für jede technische Gültigkeit, wenn sie solche sinnlosen Aussagen treffen.

Drittens wollen wir uns überlegen, wofür der Großteil der Java-Entwicklung bestimmt ist: in erster Linie Back-End-OLTP; Überwachungssysteme kommen an zweiter Stelle. Beide Systemtypen sollen in Clustern und für Wochen, wenn nicht Monate ohne Unterbrechung ausgeführt werden. Ist es dann wirklich wichtig, dass Ihre kleine Sonnenfinsternis oder Spielzeug-App ein oder zwei Minuten zum Laden benötigt, wenn der Zweck von REAL Java-Apps darin besteht, über einen längeren Zeitraum ausgeführt zu werden? Kontext, Menschen, Kontext.

Schließlich läuft das Backbone von OLTP bei Google und Ebay auf Java. Ich würde das als einen Beweis nehmen, der widerspricht, dass Java nicht langsam ist (zumindest für wichtige Bedingungen, nicht für kleine Spielzeugversuche, Benchmarks und nicht überprüfbare annekdotische Beweise, die speziell für den Zweck gemacht wurden, zu sagen, dass "tehe X langsam ist, es ist zum Kotzen".

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


19
Wenn ich meine JVM optimieren muss, damit Java akzeptabel schnell ausgeführt wird, während ich nichts (außer -O2) optimieren muss , damit C ++ akzeptabel schnell ausgeführt wird, ist Java langsam.
David Thornley

@ David - Offensichtliche Aussage. Jeder weiß, dass Java langsamer als C ++ ist. Das folgt aber logischerweise nicht, dass es langsam ist. Weder die Erwähnung von gcc-Flags gibt die Gültigkeit des Kommentars. Es heißt nur, dass it is slower than something else.ein Jaguar langsamer ist als ein Gepard. Macht das erstere slow? Versuchen Sie es mit technischer Objektivität und fragen Sie sich: Kann man logisch erklären, arbitrarilydass etwas sloweinfach daran liegt it is slowerals etwas anderes without mentioning a context of operations, das definiert, was ist fast enoughund wofür? Kannst du das logisch?
Luis.espinal

5
@ luis.espinal: Ich habe auf Ihren Grund # 2 geantwortet: Die Leute sagen, Java sei langsam, weil sie Ihrer Meinung nach Java nicht optimieren konnten. Bitte beachten Sie auch meine Verwendung von "akzeptabel schnell". Es scheint mir, dass etwas, das nicht "annehmbar schnell" ist, langsam ist, und es scheint mir, dass etwas, von dem Leute routinemäßig behaupten, dass es langsam ist, wahrscheinlich nicht annehmbar schnell ist.
David Thornley

4
@luis espinal Du klingst wie Kant :) Die Leute hier haben implizit angenommen, dass langsam langsamer ist als in anderen praktischen, produktionsbereiten Sprachen wie C ++. (Erinnern Sie sich an die Physik?) Wenn Sie die potentielle Energie messen, messen Sie sie immer relativ zu einem bestimmten Grund. Nach Ihrer Grammatik ist "X ist dumm" unbegründet. und "X ist dümmer als Knuth" macht X nicht absolut dumm, da so ziemlich jeder hier X sein kann. Ich bin damit einverstanden, dass es keine Elite ist, einen Lang Slow zu nennen, aber die Leute hier, die das sagen, sind nicht "dumm", sondern haben zufällig eine vereinbarte implizite Annahme getroffen.
Yati Sagade

1
@ Luis hahaa .. schöne Beobachtung. (Mein Glaube, dass Sie eine Reinkarnation von Kant sind, ist noch fester geworden.) Und solche Diskussionen enden in Flammenkriegen und unproduktiven Tastenanschlägen der Job zur Hand. Zustimmen, Kant2? : P
Yati Sagade

8

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

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

PS: Wenn dies nicht der Fall ist, nennen Sie mir zunächst mindestens eine bissige Java-App, die ich noch nie gesehen habe.


6
Bitte fassen Sie den Inhalt der PDF in Ihrer Antwort zusammen.
Adam Lear

1
Dieses Papier ist sehr weit von den Standards der wissenschaftlichen Forschung entfernt. Es werden nicht einmal genau dieselben Algorithmen und Optimierungen in allen Sprachen verglichen. "E. Java-Optimierungen Jeremy Manson hat die Leistung von Java mit der ursprünglichen C ++ - Version gleichgesetzt. Diese Version wird im Verzeichnis java_pro gespeichert. Beachten Sie, dass Jeremy sich bewusst geweigert hat, den Code weiter zu optimieren. Viele der C ++ - Optimierungen würden für Java gelten Version auch. " jeremymanson.blogspot.com/2011/06/scala-java-shootout.html
Piotr Kolaczkowski

6

TMHO, dies liegt an der Zeit, die benötigt wird, um die VM im Browser zu starten. Wenn eine Anwendung langsam startet, werden sich die Leute nur daran erinnern. Denn lange Anlaufzeiten nerven wirklich. Ja wirklich. Einer meiner Kollegen sagte mir, dass er Firefox nicht benutzt, weil es zu langsam ist. (?!?). Aber, ja, ok, unter Windows braucht Firefox sehr viel Zeit, um angezeigt zu werden. Ihm zufolge ist diese App langsam, machte er sich Gedanken über die allgemeine Geschwindigkeit.


Aus diesem Grund hat Mozilla sehr viel Mühe darauf verwendet, dass Firefox schnell startet ...
Spudd86

2
Es könnte sich herausstellen, wie Windows. Ja, nachdem Sie sich angemeldet haben, wird der Desktop sehr schnell angezeigt, aber Sie müssen noch eine Weile warten, bis er reagiert.
Bart van Heukelom

6

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


1
JRuby ist schneller als Ruby, sogar in Version 1.9. Die Lücke schließt sich jedoch.
Dan Rosenstark

2
+1 für das Hinweisen auf ein großes Problem. Obwohl ich sagen würde, dass das OP wahrscheinlich mit C # oder C ++ verglichen wird.
Billy ONeal

@Yar, Sie weisen darauf hin, dass CRuby JRUby einholt?

6

Meinungen sind Meinungen und Fakten sind Fakten.

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

Während der letzten Ausgaben (2009, 2010, 2011) verwendeten rund 75% der Programmierer, die die letzten Runden erreichten, C ++, im Gegensatz zu rund 15%, die Java verwendeten.

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


3
Das beweist nur, dass Java es in einem auf Geschwindigkeit ausgerichteten Wettbewerb an die Spitze schaffen kann , aber die meisten Leute entscheiden sich für C ++.
Adam Lear

3
"Lösen Sie schwierige Computerprobleme in kurzer Zeit" - wie lange dauert es, den Code zu schreiben, oder wie lange dauert es , den Code auszuführen? Unabhängig davon ist Ihre Tatsache, dass - eine Tatsache - was hat das mit der Frage zu tun? Ziehen Sie aus Ihrer Tatsache eine Schlussfolgerung?
Occulus

Das mag nur daran liegen, dass 75% der Leute, die Programme schreiben, die die letzten Runden machen, denken, Java sei langsam, ohne es jemals getestet zu haben, und verwenden stattdessen C ++, weil sie glauben, es sei schnell, ohne es jemals getestet zu haben.
Jwenting

4

Circa 1997 habe ich einen HP Vectra VE (200 MHz) und Windows 95 verwendet. Die meisten Anwendungen liefen sehr schnell, aber dann habe ich ein paar Anwendungen ausprobiert, die in Java geschrieben wurden (IDEs, wenn ich mich richtig erinnere). 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. Da Java-GUI-Anwendungen ein ziemlich charakteristisches Aussehen hatten, lernte ich, dieses Aussehen (und Java) mit schlechter Leistung zu verbinden.


2
Ich erinnere mich an 1997! Tolles Jahr, obwohl viele Weine - und Beobachtungen - von 1997 nicht mehr brauchbar sind.
Dan Rosenstark

1
Ich erinnere mich auch gut an 1997. Windows stürzte ständig ab und musste bei der Installation eines Treibers neu gestartet werden. Stück Müll.

Und Sie haben Ihre Meinung von 1997 nicht geändert? Ist Ihnen aufgefallen, dass sich 2011 völlig von 1997 unterscheidet?
Jesper

5
Meine Analyse aus diesen Daten wäre, dass 1997 gesaugt wurde.
JasonTrue

4

Es kommt darauf an, was Sie als langsam bezeichnen.

Erstens hat Java 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. Eine gebundene Prüfung mit wahlfreiem Zugriff ist ein Beispiel.
  • Machen Sie etwas wirklich schnelles in Java erforderlich, um gegen die JVM zu arbeiten (um beispielsweise die Cache-Zeile zu nutzen).
  • Das Fehlen einer Metaprogrammierung bedeutet eine Zeitstrafe für jede Abstraktion, sodass die Leistung in vielen Fällen zu Lasten des Designs geht.
  • Java kann kaum eine Echtzeitbeschränkung gewährleisten - von Natur aus - und dies könnte von manchen Leuten als "langsam" angesehen werden.

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

Java ist eine auf Produktivität ausgerichtete Programmiersprache. 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.


2

Einfacher, kanonischer Java-Code ist in der Regel gleich oder schneller als einfacher, kanonischer C / C ++ / D-Code. Einfacher, kanonischer Code führt in der Regel unnötig viele Speicherzuweisungen aus, ist nicht besonders auf eine CPU-Architektur abgestimmt, es werden nicht viele Optimierungen auf niedriger Ebene vorgenommen usw. Javas HotSpot GC ist einfach nur erstaunlich, und die VM-Optimierungen sind in der Regel besser zu sein als ein statischer Compiler.

Auf der anderen Seite bietet C / C ++ / D viel mehr Möglichkeiten , wenn Sie wirklich Leistung benötigen und bereit sind, die Dinge von Hand zu optimieren, um sie zu erhalten. Sie können den Inline-Assembler in Java nicht verwenden. Sie können keine schmutzigen Punning-Tricks verwenden, um Gleitkommazahlen als Arrays von Bits 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 Stack zuordnen wie in C / C ++ / D. In Java ist die einzige Möglichkeit, etwas zu erreichen, das in etwa Funktionen höherer Ordnung entspricht, die Verwendung von Schnittstellen und die Bindung zur Laufzeit. In D und (ich denke, korrigieren Sie mich, wenn ich mich irre) C ++ können Sie Funktionen an Vorlagen übergeben, sodass die Bindung zur Kompilierungszeit ohne Flexibilitätsverlust erfolgen kann.


5
Können Sie diese Kommentare einholen? Dh wo gibt es Benchmarks, die kanonischen Code in jeder Sprache anzeigen, wobei Java schneller ist?
Billy ONeal

1

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

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

HIER erfahren Sie, warum die 64-Bit-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)  

3
Die Server-VM startet langsamer, kompiliert jedoch nicht das gesamte Programm vor dem Start. Es ist nicht möglich, Klassen werden träge und möglicherweise über Reflektion geladen, sodass nicht im Voraus bekannt ist, welcher Bytecode nativ kompiliert werden muss.
Dan Dyer

@Dan Dyer Nach einigen Recherchen sieht es so aus, als hätte ich falsch verstanden, was ich gelesen habe. Ich meinte, dass die Server-VM mehr optimiert, während der Client für einen schnellen Start und eine geringere Speichernutzung optimiert ist.
AndrejaKo

Die Server-VM ist für Prozesse mit langer Laufzeit optimiert, lädt daher mehr vor, was zu längeren Startzeiten führt und tendenziell mehr RAM verbraucht. Die Client-VM ist für eine geringere Stellfläche und Startzeiten optimiert, weist jedoch möglicherweise eine geringere Laufzeitleistung auf.
Jwenting

0

Die Leistung von Java ist jedoch sehr subjektiv. Die Wahrnehmung, warum Java langsam ist, ist hauptsächlich auf Gründe zurückzuführen, die andere bemerkt haben: Die Wahrnehmung von etwas ist bei den meisten Menschen durch ihre früheren Erfahrungen geprägt, und Java war nicht immer eine gut optimierte Sprache die Haube. Ebenso ist Vanilla Eclipse keine besonders schnelle IDE und verblasst im Hinblick auf die Reaktionsfähigkeit im Vergleich zu einer IDE wie Visual Studio.

Abgesehen von den UI-Problemen, die Java beim Start hat, ist es für die meisten Anwendungen jedoch schnell genug. Wenn Sie suchen, können Sie Artikel finden , die sie mit anderen Sprachen vergleichen, und die meisten der präsentierten Ergebnisse bringen sie in den Bereich, in dem es nur dann zu Problemen kommt, 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 besteht darin, dass Sie damit eine relativ schnelle Entwicklung durchführen können, die Sie mit C nicht durchführen können Wenn Sie sich die für die Bioinformatik verwendeten Sprachen ansehen (ich persönlich verwende regelmäßig R, Python und Java), werden Sie feststellen, dass keine von ihnen genau die schnellste ist und es nicht ungewöhnlich ist, dass die Datensätze in der Bioinformatik bis in die 100er reichen von Gigabyte an Informationen. Letztendlich ist die menschliche Zeit immer noch wertvoller, und obwohl die Geschwindigkeitsunterschiede spürbar sind, sind die Datensätze in der Regel so groß, dass sie ohnehin über Nacht ausgeführt werden.

Wenn es einfacher wäre, eine flotte Benutzeroberfläche in Java zu schreiben, würde die Geschwindigkeitswahrnehmung ziemlich schnell vom Radar fallen, da die meisten Leute nicht genügend Sprachen pushen, um die Geschwindigkeit täglich zu verbessern.


0

Wenn ich eine wertlose Münze einwerfe, stelle ich fest, dass Java-Webapps im Allgemeinen lange Start- und Reaktionszeiten haben, was Python oder Ruby meiner Meinung nach besser gemacht hätte.

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


1
Im Web ist die Startzeit nicht so wichtig. Am wichtigsten sind der Ressourcenverbrauch und die Skalierbarkeit.
Berin Loritsch

-7

Ich würde sagen, Java ist unendlich langsam und nicht nur träge, da es keine einfachen Probleme löst, die in echten Hochsprachen einfach sind.

Lassen Sie mich ein einfaches Beispiel geben. Es gibt eine einfache Optimierung, die angewendet wird, wenn eine Liste zweimal zugeordnet wird, die Abholzung genannt wird: Hier ist die Regel dafür, die in meiner Sprache Felix geschrieben ist:

reduce deforest[T,U,V] (f:T->U, g:U->V, x:list[T]): 
  map g (map f x) => map (compose(g,f)) x
;

Das heißt: Anstatt die Liste x mit f abzubilden und sie dann erneut mit g abzubilden, sind zwei Listendurchläufe erforderlich und eine temporäre Garbage-Liste muss nur die Liste mit der Zusammensetzung der Funktionen zugeordnet werden.

Dies ist eine Optimierung auf hoher Ebene, die bei weitem wichtiger ist als die Leistung auf niedriger Ebene der Java-JVM. Die Spezifikation, die ich oben angegeben habe, ist nicht nur eine hübsche Syntax, sondern eine Anweisung des Benutzers, die dem Felix-Compiler mitteilt, wie eine Optimierung durchgeführt werden soll.

Bitte zeigen Sie mir, wie man so etwas in Java macht. Nein? Dann ist Java langsam. Sehr langsam. [Haskell kann das automatisch machen, glaube ich].

Und bevor Sie sagen "aber Java ist eine OO-Sprache, diese Art der Optimierung gilt nicht" .. Nun, das ist genau mein Punkt. Java ist zum Kotzen und OO zu sein ist einer der Hauptgründe.

Die JIT-Optimierung kann niemals annähernd mit den Optimierungen konkurrieren, die ein anständiger Compiler durchführen kann.


3
Ich habe absolut keine Ahnung, was Ihr Code dort macht. Und wenn Sie sagen, dass eine ganze Sprache langsam ist, nur weil sie keine kleine Optimierung durchführen kann, dann gibt es hier andere Probleme
TheLQ

7
- Eine alte Frage ausgraben und eine Sprache mit sehr lahmen Argumenten schlagen. Sagen Sie mir, wenn Sie eine ausführliche Beschreibung wünschen, was mit Ihrer Argumentation nicht stimmt. Für den Anfang ist es nicht sehr objektiv, OO als Hauptgrund für das Saugen zu nennen, und die tatsächliche Leistung einer JVM + JIT ist sehr gut, selbst wenn Optimierungen ausgelassen werden.

8
Haskell ist für unsere Hauptplattform unendlich langsamer als Java, weil es nicht auf diese Plattform portiert ist, also ist Haskell zum Kotzen ...

1
@ Thorbjørn Ravn Andersen Ich wünschte wirklich, ich könnte Ihnen für diese Beobachtung +1 geben.
Patrick Hughes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.