Wie schnell ist Javascript im Vergleich zu Java? [geschlossen]

77

Gibt es Tests, die die Leistung von Javascript mit der von Java vergleichen?

UPDATE: Da jeder fragt, warum zum Teufel diese Frage, hier ist ein Zusammenhang :)

Wie Sie alle wissen - ich hoffe - befindet sich Javascript heutzutage nicht nur im Webclient, sondern auch auf dem Webserver mit node.js.

Es könnte auch in Mobiltelefonen und Dekstops mit Appcelerator und Phonegap ausgeführt werden.

Es könnte auch wesentlich im Webbrowser verwendet werden, um die Benutzererfahrung erstklassig zu machen, wie bei Desktop-Anwendungen.

Aber Java könnte diese Dinge auch tun, indem es Applets auf dem Webclient und auf Mobiltelefonen ausführt. Es ist auch eine Sprache für das Backend mit vielen Frameworks zur Auswahl.

Da sich jeder von ihnen in dem genannten Bereich fast / vollständig ersetzen könnte, möchte ich den Leistungsunterschied zwischen ihnen für jeden von mir beschriebenen Fall kennen:

  • Client: Java Applets vs Javascript
  • Server: Java EE vs Javascript mit Node.js + Express
  • Handys: Java ME vs Javascript mit Phonegap / Appcelerator
  • Desktop: Java SE vs Javascript mit Phonegap / Appcelerator

Ich hoffe, der Kontext ist jetzt klarer.

Never_had_a_name
quelle
2
Woran arbeiten Sie, wo dies zwei konkurrierende Sprachen sind? Möchten Sie JavaScript außerhalb eines Webbrowsers verwenden?
John Kugelman
8
@ John: Siehe Node.js, V8, MongoDB ....
Josh K
1
John hat recht, ohne irgendeinen Kontext macht diese Frage nicht viel Sinn. Es gibt Bereiche, in denen Java und Javascript heutzutage "konkurrieren" können, aber es gibt immer noch wenige. Verwenden Sie das richtige Werkzeug für den Job!
Wuputah
3
Ich denke du fragst "Hallo, was bevorzugst du, Saft oder Steak?"
Cheng Chen
1
@ John Kugelman. Ja bin ich. Lesen Sie, wo ich sie verwenden möchte, fast überall außerhalb des herkömmlichen Webbrowsers.
nie_had_a_name

Antworten:

124

Java und JavaScript sind beide Programmiersprachen. Programmiersprachen sind nur ein Bündel abstrakter mathematischer Regeln. Programmiersprachen sind nicht schnell. Oder langsam. Sie gerade sind .

Die Leistung einer Anwendung hat nichts mit der Sprache zu tun. Der wichtigste Faktor ist die Anwendungsarchitektur. Dann kommt die algorithmische Effizienz. Dann Mikrooptimierungen. Dann kommt die Qualität des Compilers / Interpreters. Dann die CPU. Vielleicht ein paar andere Schritte dazwischen. Die Sprache spielt jedoch keine direkte Rolle. (Und wenn Sie über Benchmarks sprechen, spielt natürlich auch der jeweilige Benchmark eine Rolle, sowie wie gut der Benchmark implementiert ist, wie gut er ausgeführt wird, ob der Typ, der den Benchmark durchführt, tatsächlich etwas über Benchmarking weiß . und noch wichtiger Statistiken. Auch das genaue Definition dessen, was Sie tatsächlich meinenvon "schnell" ist ziemlich wichtig, da es auch einen signifikanten Einfluss auf die Benchmark haben kann.)

Die Sprache könnte jedoch indirekt eine Rolle spielen: Es ist viel einfacher, Leistungsengpässe in 10 Zeilen ausdrucksstarken, klaren, präzisen, lesbaren, gut faktorisierten, isolierten Lisp-Codes auf hoher Ebene zu finden und zu beheben als in 100 Zeilen Wirrwarr, niedriges C. (Beachten Sie, dass diese beiden Sprachen nur Beispiele sind. Ich möchte keine Sprache herausgreifen.) Twitter hat beispielsweise gesagt, dass dies mit einer weniger ausdrucksstarken Sprache als Ruby nicht der Fall wäre konnten in so kurzer Zeit so radikale Änderungen an ihrer Architektur vornehmen, um ihre Skalierbarkeitsprobleme zu beheben. Der Grund, warum Node.js eine so gute E / A-Leistung bieten kann, liegt darin, dass die Standardbibliothek von JavaScript so beschissen ist. (Auf diese Weise muss Node.js alle E / A selbst bereitstellen, damit sie von Grund auf für ereignisgesteuerte E / A optimiert werden können. Ruby und Python, Zum Beispiel haben E / A-Bibliotheken, die genauso gut funktionieren wie Node.js und viel ausgereifter sind, ereignisreich ... Ruby und Python haben jedoch bereits große Standardbibliotheken, einschließlich E / A-Bibliotheken, die alle synchron und don sind spielen nicht gut mit ereignisreichen Bibliotheken. JavaScript hat nicht das Problem von E / A-Bibliotheken, die mit ereignisgesteuerten E / A nicht gut funktionieren, da JavaScript keine E / A-Bibliotheken hatüberhaupt .)

Aber wenn Sie die beiden wirklich vergleichen möchten, ist hier ein interessanter Datenpunkt für Sie: HotSpot, eine der beliebtesten und auch leistungsfähigeren JVM-Implementierungen, wurde von einem Team von Leuten erstellt, zu denen unter anderem gehörten: ein Typ namens Lars Bak. Tatsächlich erschien HotSpot jedoch nicht aus dem Nichts, sondern basierte auf dem Quellcode der anamorphotischen Smalltalk-VM, die von einem Team von Leuten erstellt wurde, zu denen unter anderem ein Mann namens Lars Bak gehörte.

V8, eine der beliebtesten und auch leistungsfähigsten JavaScript-Implementierungen, wurde von einem Team von Leuten entwickelt, zu denen unter anderem ein Mann namens Lars Bak gehörte. Tatsächlich erschien V8 jedoch nicht aus dem Nichts, sondern basierte auf dem Quellcode der anamorphotischen Smalltalk-VM, die von einem Team von Leuten erstellt wurde, zu denen unter anderem ein Mann namens Lars Bak gehörte.

Angesichts der Tatsache, dass beide mehr oder weniger gleich sind, können wir eine ähnliche Leistung erwarten. Der einzige Unterschied besteht darin, dass in HotSpot 15 Jahre lang über hundert Ingenieure daran arbeiten, während in V8 ein Dutzend Ingenieure weniger als 5 Jahre lang arbeiten. Das ist der einzige Leistungsunterschied. Es geht nicht um statische oder dynamische Typisierung (Java ist statisch typisiert, aber die meisten JVMs und sicherlich HotSpot nehmen keinerlei statische Optimierungen vor, alle Optimierungen sind rein dynamisch), Kompilierung oder Interpretation (HotSpot wird tatsächlich mit einem zusätzlichen JIT-Compiler interpretiert, während V8 ist rein kompiliert), High-Level vs. Low-Level. Es geht nur um Geld.

Aber ich wette, dass ich für jedes Paar von Java- und JavaScript-Implementierungen, bei denen die Java-Implementierung schneller ist, ein anderes Paar finden kann, bei dem die JavaScript-Implementierung schneller ist. Außerdem kann ich das Paar wahrscheinlich behalten und einfach einen anderen Benchmark verwenden. Es gibt einen Grund, warum das Computersprachen-Benchmark-Spiel als "Spiel" bezeichnet wird: Sie ermutigen Sie sogar , direkt auf ihrer eigenen Seite mit den Benchmarks herumzuspielen, um eine beliebige Sprache an die Spitze zu bringen.

Jörg W Mittag
quelle
10
Deshalb habe ich gefragt: "Wie schnell ist Javascript im Vergleich zu Java?"
nie_had_a_name
12
>> Java und JavaScript sind beide Programmiersprachen. ... Programmiersprachen sind nicht schnell. Oder langsam. << Richtig. Angesichts des Kontexts geht es also um Programmiersprachenimplementierungen, nicht um Programmiersprachen.
igouy
53
Nicht zustimmen. Viele Sprachen definieren Funktionen, die von heutigen CPUs aufgrund ihres Designs nicht effizient verarbeitet werden können. Das ist der Grund, warum Java im Allgemeinen schneller als Smalltalk ist und gut geschriebenes C Java im Allgemeinen übertrifft. Auch wenn eine Sprache über eine automatische Speicherverwaltung verfügt oder nicht und wenn eine Sprache über Datenstrukturen auf niedriger Ebene (Byte [], Strukturen in C) verfügt, ist dies wichtig.
R. Moeller
2
@ R.Moeller - Es ist sicher richtig, dass viele Sprachfunktionen die Optimierung erschweren. Ein (hypothetischer) "wirklich intelligenter" Compiler wäre jedoch weiterhin in der Lage, Smalltalk in optimales Java und damit in Maschinencode zu übersetzen. (Wenn ein Mensch dies kann, kann dies auch ein ausreichend fortgeschrittener Compiler.) Die Tatsache, dass "heutige CPUs" oder "heutige Compiler" dies nicht können, ist im Grunde eine Einschränkung der heutigen Technologie. Nicht die Sprache (n) ).
Stephen C
2
@ StephenC: Eigentlich HotSpot ist ein Smalltalk VM, so, wenn Sun / Oracle das ganze Geld in Smalltalk statt Java geworfen hatte, dann würde Smalltalk so schnell wie Java heute ist. (Tatsächlich sind die kommerziellen Hochleistungs-Smalltalks sowieso nicht so weit entfernt.) Denken Sie daran: Als Java zum ersten Mal herauskam, waren Smalltalks viel schneller als Java. Als die Self-VM (die zur Animorphic Smalltalk-VM wurde, die sowohl zu HotSpot als auch zu V8 wurde) herauskam, war sie mit vielen der damals verfügbaren C ++ - Implementierungen konkurrenzfähig und schneller als einige von ihnen.
Jörg W Mittag
41

Ich muss nur eine Anekdote hinzufügen: Ich habe kürzlich einen Java-Calc-Server (Finanzen) in Javascript (nodejs v0.6.8) neu implementiert. In der WRT-Entwicklungszeit war die Javascript-Implementierung im Vergleich zur ursprünglichen Java-Implementierung mit weitaus weniger Codezeilen ein Kinderspiel. Es war wirklich ein Hauch frischer Luft.

Der Javascript-basierte Server kann 2,4.000 Trades / Sek. Berechnen, während der Java-Server 400 + / Sek. Auf derselben Hardware mit weniger Speicher verarbeitet. Ich würde die Geschwindigkeitssteigerung nicht auf die Leistung von V8 im Vergleich zu Java 7 zurückführen, sondern auf die Implementierung. Die Javascript-Implementierung verwendet weitaus weniger Datenstrukturen, führt eine Größenordnung weniger Methodenaufrufe durch und verfolgt einen einfacheren und knapperen Ansatz.

Ich bin natürlich sehr zufrieden mit der Leistung von node.js. Und das von jemandem, der nur viele (9) Jahre lang Java war.

kls
quelle
Dies ist ein großartiger Datenpunkt ... danke.
HDave
7
Ich denke, Sie vergleichen jetzt synchrone und asynchrone Ansätze, aber nicht Java mit Javascript. Und wenn Node.js asynchron ist, gewinnt es definitiv gegen Sync-Tomcat-Servlets und -Bibliotheken. Dies liegt jedoch nicht daran, dass Javascript schneller ist, sondern daran, dass Async Ressourcen besser nutzt als Sync.
Night Warrier
2
Welche Leistungsänderung erwarten Sie, wenn Sie eine andere Version des Programms in Java schreiben müssen? Glauben Sie, dass die Leistung des Programms durch die Erkenntnisse aus der JavaScript-Version erheblich gesteigert werden würde (im Vergleich zur ersten Java-Version)?
Rwitzel
Ich hatte NodeJS mit der normalen C-Leistung in number-crunchingAnwendungen verglichen . NodeJS war nur 2,5 mal langsamer als C.
Thevs
32

Hier sind einige Tests zum Vergleich von Javascript (V8) und kompiliertem Java:

Sie zeigen an, dass Java im Allgemeinen schneller ist 1 . Wenn Sie sich jedoch mit diesen Seiten und den verknüpften Ressourcen beschäftigen, werden Sie feststellen, dass es sehr schwierig ist, Gleiches mit Gleichem zu vergleichen.

Interessanterweise schneidet Javascript (unter bestimmten Bedingungen) für den Benchmark "Regex-DNA" deutlich besser ab als Java. Ich vermute, dass dies daran liegt, dass die Javascript-Regex-Engine schneller ist als die Java-Regex-Engine. Dies ist angesichts der Bedeutung von Regexen in typischen Javascript-Anwendungen nicht ganz überraschend.

1 - Genau genommen können Sie nicht sagen, dass Sprache X schneller als Sprache Y ist. Sie können nur bestimmte Implementierungen der jeweiligen Sprachen vergleichen. Und die Seite, auf die ich verlinkt habe, ist klar darüber ... wenn Sie über die Startseite hineingehen möchten. Es ist jedoch nicht völlig unangemessen, anhand bestimmter Datenpunkte zu verallgemeinern ... und das Fehlen fehlender widersprüchlicher Datenpunkte ..., dass Java bei rechenintensiven Aufgaben normalerweise schneller als Javascript ist. Die Kehrseite ist jedoch, dass diese Art der Leistung oft kein objektiv wichtiges Kriterium ist.

Stephen C.
quelle
>> Ich vermute, dass dies daran liegt, dass die Javascript-Regex-Engine schneller ist ... << Mit dem Regex-DNA-JavaScript V8 # 2-Programm ist der Quellcode ein Link zu "Irregexp, Google Chrome's New Regexp Implementation" blog.chromium.org /
2009/02
11

Java natürlich.

Programmierer lieben es, die Ausführungsgeschwindigkeit wie eine Art Pissing Content zu vergleichen. Es ist nur eine Metrik und die meiste Zeit bei weitem nicht die wichtigste. Java ist eine Sprache, die schnell genug für fast alles ist, aber hoch genug, um Dinge wie GC zu bekommen, die man normalerweise nicht in ähnlichen Sprachen bekommt. Javascript ist eine dynamische Abschlusssprache, die sich hervorragend dazu eignet, Dinge schnell zu erledigen (und für FP-Programmierer, die in einer OO-Welt stecken ;-)). In den Räumen, in denen beides angemessen wäre, gibt es nicht viel Schnittpunkte.

Ich werde jetzt aufhören zu päpsteln

BEARBEITEN: um die Bearbeitung im Beitrag zu adressieren

Aufgrund der Art und Weise, wie man idiomatisches Javascript (Funktionen, die aus Funktionen bestehen) schreibt, eignet es sich überraschend gut für asynchrone Programmierung, wahrscheinlich besser als jede andere Sprache mit ähnlicher Popularität. Node.js glänzt, wenn es um eine große Anzahl von Kurzverbindungen geht, daher passt Javascript wirklich gut zu solchen Dingen.

Während node.js absolut fantastisch ist, bedeutet die neue Schärfe nicht, dass es bei allem das Beste ist, egal was der Hype sagt. Wenn eine Java-App durch einen Knoten ersetzt werden kann, war Java wahrscheinlich überhaupt nicht angemessen.

Matt Briggs
quelle
9

Wahrscheinlich nicht, aber es spielt keine Rolle.

Vor der JavaScript-JIT von Google Chrome konnte Java JavaScript für sich gewinnen, sobald das Problem groß genug wurde, um die Ladezeit zu überwinden.

Java sollte JavaScript aufgrund von Integer vs. Float-Mathematik immer noch rundum ausschalten. Egal wie gut die JIT ist, sie kann das nicht wirklich ausgleichen.

WebAssembly wird dies ohnehin auf den Kopf stellen.

Joshua
quelle
6
Das PHP-Problem auf Facebook wurde groß genug und dann wurde es kompiliert. Also ...
BrunoLM
1
Nicht unbedingt wahr für Ihren letzten Punkt (vielleicht war es im Jahr 2010?). V8 kompiliert zunächst eine Funktion mit weniger Optimierungen und verfolgt in der Zwischenzeit Statistiken zu Typen usw. für mehrere Läufe. Angenommen, Sie summieren alle Zahlen in einem Array. Wenn V8 erkennt, dass alle vorherigen Werte Ganzzahlen waren, wird die Funktion neu kompiliert, um Anweisungen für den Maschinencode für die Ganzzahladdition zu verwenden (dies ist "optimistisch"). Wenn sich auf halber Strecke des Arrays plötzlich eine Zeichenfolge befindet, wird auf die weniger optimierte Version zurückgegriffen. Wenn Sie also konsistent sind, kann es ziemlich schnell gehen.
ShawnFumo
Es gibt einen großartigen Vortrag von Vyacheslav Egorov von Anfang dieses Jahres, der sich unter anderem eingehend mit Arrays in V8 befasst.
ShawnFumo
Ah, also haben sie das endlich auch behoben. Ich denke, diese Antwort wird im Laufe der Zeit langsam immer weniger wahr.
Joshua
4

http://benchmarksgame.alioth.debian.org/u64q/javascript.html

(Denken Sie daran, die CPU-Spalte sowie die verstrichenen Sekunden zu betrachten.)

Laut dem obigen Link ist JavaScript in der jetzigen Realität für fast alles viel langsamer.

Schalk Dormehl
quelle
3
Java verwendet in fast allen Fällen das 2-3-fache des Speichers ... scheint nicht fair zu sein
Esailija
1
Dieser Benchmark ist unfair. Die meisten von Java Perf. wird durch Multithreading gewonnen. Sie können Multithreading in NodeJs mithilfe neuer Prozesse und Pipings durchführen. Dies fehlt aber in diesen Tests.
Stepan Yakovenko
3
@Stepan - hier ist, wie Sie Programme beitragen können - Benchmarksgame.alioth.debian.org/play.html#contribute
igouy
-7

Sie haben nur einen ähnlichen Namen, das war's. Java wird kompiliert, während JavaScript (meistens) interpretiert wird. Selbst mit dem Just-in-Time-Compiler von V8 ist Java bei allem schneller.

Josh K.
quelle
1
Um fair zu sein, sind sie viel ähnlicher als nur beim Namen. Für den Anfang haben beide dank ihrer Verwendung von C eine ähnliche syntaktische Ähnlichkeit. Zusätzlich kann Java-Code in JavaScript geschrieben werden. Und schließlich wird Java mit einem integrierten JavaScript-Interpreter geliefert, mit dem Sie JavaScript in eine Java-App einbetten können.
Moses
Haben Sie einen tatsächlichen Beweis für diese wilde Behauptung "bei allem schneller"? Angesichts der extrem unterschiedlichen Bereiche, in denen diese beiden Sprachen häufig arbeiten, würde ich sagen, dass jeder Versuch, "schneller" zu sagen, viel mehr Kontext erfordert, da ich nicht kaufe, dass Java (bei allem) einfach schneller ist. Würden Sie beispielsweise ein Java-Applet verwenden, einen lahmen DHTML-Effekt, den JS im Schlaf erzielen könnte? Ist das Applet schneller?
Svend
2
@Svend: Sie vergleichen Sprachen nicht, indem Sie Applets oder bestimmte Funktionen schreiben. Führen Sie abstrakte Berechnungen, Rekursionen, das Füllen eines Rot / Schwarz-Baums mit 10.000 Knoten, Gleitkommaberechnungen, die Manipulation von Zeichenfolgen usw. durch. Wir diskutieren hier nicht die Verwendung, sondern die (im Kern) schnellere Leistung.
Josh K
Wenn Sie hauptsächlich in Bezug auf JS sagen, sagen Sie das aufgrund von Dingen wie GWT? Wann wird JS nicht interpretiert?
Esteban Araya
@Esteban Araya: Alle modernen JavaScript-Ausführungs-Engines haben Compiler. V8 ist sogar ein reiner Compiler, es hat nicht einmal einen Interpreter.
Jörg W Mittag