Dart vs. Java – was ist schneller?

Eric Herrmann

Spoiler: Dart ist schneller. Aber, und jetzt kommt der Trost, sowohl an Dart als auch am DeltaBlue-Benchmark, der von Nikolay Botev für einen Performancevergleich der beiden Sprachen Java und Dart herangezogen wurde, gibt es fundierte Kritik, die mehr Informationen liefert als der Benchmark selbst. Zwar liefern sich Java und Dart in den durchgeführten Benchmark-Tests tatsächlich ein fortwährendes Kopf-an-Kopf-Rennen, doch laufen die darin erstellten Tests immer nur für wenige Sekunden, sodass der eigentliche Einsatz von Java verfehlt wird: Java ist nunmal auf das langfristige Ausführen großer Applikationen ausgelegt.

Einer der größten Kritiker des DeltaBlue-Benchmarks ist Red-Hat Mitarbeiter und JVM-Mitwirkender Charles Nutter. Dieser kritisierte in erster Linie den Versuchsaufbau von Nikolay Botev, der massive Mengen an Speicher-Garbage im Java-Test verursachte und damit das Ergebnis zu Gunsten von Dart verschoben hatte. Nutter schreibt selbst:

„I tried running your code, and the first thing I noticed was the huge rate of allocation it’s doing. During the 1.7s it takes on my system per iteration, it’s doing 15-30 young GC runs, each evacuating about 75MB of objects. On the low end that’s in the range of 750MB of allocation every second.
[…]
I made various improvements, and it was rather easy to make the Java version run faster than the Dart version.“

Doch nicht nur der Benchmark ist noch eine Variable im Vergleich Java vs. Dart. Auch die Sprachen an sich werden sich noch weiter entwickeln. Besonders Dart steckt mit seinem Alter von zwei Jahren noch in den Kinderschuhen. Wichtige Features wie Mixins, Isolates oder Mirrors befinden sich zusammen mit der ganzen Sprache noch in einem frühen Stadium. Sicherlich wird sich da auch in Sachen Performance noch viel ändern, und auch die Java-Entwicklung bleibt nicht stehen.

Und wer JVM-Experte Charly Nutter herausfordert, bekommt prompt seine Quittung: Optimiert man den Performance-Test ein wenig mehr in Richtung Java (tatsächlich hatte Botev Dart-Code zuerst umständlich nach Java portiert und auf diesen Code die Tests ausgeführt) – und nicht wie Botev in Richtung Dart – erhält man flugs das gegenteilige Ergebnis: Java erweist sich hier als viel schneller. Fazit: Sag mir, was ich beweisen soll, und ich liefere dir den dazugehörigen Benchmark…

Geschrieben von
Eric Herrmann
Eric Herrmann
Eric Herrmann war von 2012 bis 2013 als Redakteur bei Software & Support Media tätig. Sein Themenschwerpunkt liegt bei Webtechnologien, insbesondere PHP und JavaScript. Vor seiner Zeit als Online-Redakteur hat er Wissenschaftsjournalismus (B. A.) an der Hochschule Darmstadt studiert.
Kommentare
  1. Rüdiger Möller2014-02-02 02:32:15

    Naja,

    diese Benchmarks sind nur bedingt aussagekräftig. Insbesondere im Low-Level Bereich (native Datentypen, z.B. Parsing) ist Dart (konstruktionsbedingt) um Faktoren langsamer.
    Hinzu kommt eine sehr rudimentäre Garbage Collection (Mark&Sweep), d.h. wenn die VM grössere Datenmengen hält, bricht die Performance massiv ein. Eine Generational Collector benötigt dann aber zusätzlich verlangsamende Operationen.
    Multi-Threading muss Dart auch nicht berücksichtigen (Nein, Isolates sind kein hinreichender Ersatz).
    Für Bread&Butter WebServer ist Dart hinreichend schnell, wenn es aber ans Eingemachte geht, ist man aber auf Serverseite mit Java noch deutlich besser aufgehoben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.