ubuntuusers.de

[Java] Ist Java wirklich so viel lngsamer als C/C++?

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

dersven

Anmeldungsdatum:
16. August 2005

Beiträge: 792

Wohnort: Kreuzlingen, Schweiz

Hallo.

80% der Leute mit denen ich rede meinen, das Java so viel langsamer ist als C/C++. Aber was Java langsamer werden lässt, ist mir nicht ganz klar. OK, es muss ein JVM gestartet werden, was etwas mehr Speicher kostet, aber die eigentlichen Prozesse sollten doch vergleichbar schnell sein. Ich habe von einigen Leuten gehört, dass deren Programme angeblich 10mal langsamer unter Java liefen als in C programmierte Programme. NaJa, mir ist nicht ganz klar woher so ein klarer Unterschied kommen kann, oder ob die Leute eventuell einfach in Java die Algorithmen schlechter umgesetzt haben als in C.

Eventuell wäre es für mich sinnvoll dann auf C/C++ umzusteigen, da ich berechnungen mache, die länger laufen, wo ein faktor 10 schon bedeutend wird.

Grüße und Danke

YEPHENAS

Anmeldungsdatum:
8. Juni 2009

Beiträge: 352

dersven schrieb:

Hallo.

80% der Leute mit denen ich rede meinen, das Java so viel langsamer ist als C/C++. Aber was Java langsamer werden lässt, ist mir nicht ganz klar. OK, es muss ein JVM gestartet werden, was etwas mehr Speicher kostet, aber die eigentlichen Prozesse sollten doch vergleichbar schnell sein. Ich habe von einigen Leuten gehört, dass deren Programme angeblich 10mal langsamer unter Java liefen als in C programmierte Programme. NaJa, mir ist nicht ganz klar woher so ein klarer Unterschied kommen kann, oder ob die Leute eventuell einfach in Java die Algorithmen schlechter umgesetzt haben als in C.

Eventuell wäre es für mich sinnvoll dann auf C/C++ umzusteigen, da ich berechnungen mache, die länger laufen, wo ein faktor 10 schon bedeutend wird.

Grüße und Danke

Java ist etwa um Faktor 2 langsamer als C. Aber kein Vergleich zu anderen Sprachen, die um Faktor 60 (Python) bis 130 (PHP) langsamer sind.

Sollte eigentlich bekannt sein: http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=all

Greebo

Avatar von Greebo

Anmeldungsdatum:
21. November 2006

Beiträge: 3443

Wohnort: 97070 Würzburg

Programmiersprachen (und deren Laufzeitumgebungen) zu vergleichen ist wie Bilder zu vergleichen. Man kann sagen "dieses Bild ist schöner", aber Objektivität schafft man damit nicht. Java hat seine Stärken, Java hat seine Schwächen. Es gibt Bereiche auch im Number Crunching Bereich in denen Java schneller sein kann (vor allem durch Just in Time Optimierung) genauso gibt es aber Aufgaben die nicht so liegen. Die wichtigsten Optimierungen trifft aber eh der Programmierer, der hoffentlich effiziente Algorithmen verwendet. Benchmarks machen wenn überhaupt nur einen Sinn, wenn sie auf eine hinreichend ähnliche Aufgabenstellung bezogen wurden.

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Es gibt keine Sprache namens C/C++, das sind zwei sehr sehr verschiedene Sprachen. Die Performance eines Programms muss im Einzelfall untersucht werden, normalerweise sollte ein Java-Programm aber nicht 10mal langsamer sein als ein äquivalentes C-Programm.

adun Team-Icon

Avatar von adun

Anmeldungsdatum:
29. März 2005

Beiträge: 8606

Also aus meiner geringen Erfahrung mit der JVM kann ich sagen, dass diese Vergleiche häufig daneben liegen, weil völlig unterschiedliche Konzepte verglichen werden. Ein C-Programm ist entweder schon vorher im Speicher oder es wird halt geladen, das sind im wesentlichen die zwei möglichen Fälle. Die JVM ist sehr anpassbar, so ist es nicht unüblich, dass sie die "Aufwärm" oder Lernphase erst nach 10.000 Durchläufen beendet. Dass die 9.999 vorher dann langsam sind, ist klar. Man muss also aufpassen und ggf. einen der quadrillionen Parameter anpassen.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Die ersten Javaversionen - vor 1.3 - waren in der Tat ziemlich langsam. Viele Leute haben sich damals ein Urteil gebildet, und es nie revidiert. Das waren die, die sich gefreut hatten, daß Java langsam war, denn so hatten sie ein Argument bei c oder c++ zu bleiben. ☺

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

YEPHENAS schrieb:

Java ist etwa um Faktor 2 langsamer als C. Aber kein Vergleich zu anderen Sprachen, die um Faktor 60 (Python) bis 130 (PHP) langsamer sind.

So pauschal kann das eigentlich nur falsch sein …

Sollte eigentlich bekannt sein: http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=all

Wer misst, misst Mist … gerade beim Shootout. Die Implementierungen sind Wildwuchs, folgen keinen klaren, objektiven Richtlinien und sind daher auch kaum vergleichbar. So sind manche Implementierungen mancher Beispiele parallelisiert, andere wieder nicht, usw. Der Shootout ist eine nette Spielerei, nicht mehr, nicht weniger, und taugt nicht für objektive Vergleiche von Laufzeitumgebungen und Sprachimplementierungen.

Zudem sind die Programme in ihrer Art viel zu klein, um gerade komplexere Laufzeitumgebungen wie die JVM wirklich zu erfassen.

YEPHENAS

Anmeldungsdatum:
8. Juni 2009

Beiträge: 352

user unknown schrieb:

Die ersten Javaversionen - vor 1.3 - waren in der Tat ziemlich langsam.

Damals wurde Java-Bytecode ja auch noch rein interpretiert. Also das, was man heutzutage bekommt, wenn man Java mit -Xint startet.

gargoyle

Avatar von gargoyle

Anmeldungsdatum:
6. Oktober 2006

Beiträge: 93

Wohnort: Wiesloch, Kraichgau

dersven schrieb:

80% der Leute mit denen ich rede meinen, das Java so viel langsamer ist als C/C++.

Alte, sehr alte Vorurteile. Die Startzeit von Java war früher ein Problem, Sun hat aber sehr viel optimiert und das ist kein Problem mehr. Im Bereich Number Crunching hat Java gegenüber C und C++ durch die Optimierung zur Laufzeit leichte Vorteile (Stichwort wie schon genannt: Just in time, JIT). Das hängt aber immer auch vom Code selbst ab.

Eventuell wäre es für mich sinnvoll dann auf C/C++ umzusteigen, da ich berechnungen mache, die länger laufen, wo ein faktor 10 schon bedeutend wird.

Eventuell wäre es dann sinnvoll auf Assembler umzusteigen. 😇 Aber ernsthaft - bist du denn so unzufrieden mit der aktuell Laufzeit?

Isaac_Gouy

Anmeldungsdatum:
4. März 2010

Beiträge: Zähle...

Lunar schrieb:

YEPHENAS schrieb:

Java ist etwa um Faktor 2 langsamer als C. Aber kein Vergleich zu anderen Sprachen, die um Faktor 60 (Python) bis 130 (PHP) langsamer sind.

So pauschal kann das eigentlich nur falsch sein …

Sollte eigentlich bekannt sein: http://shootout.alioth.debian.org/u32q/benchmark.php?test=all&lang=all

Wer misst, misst Mist … gerade beim Shootout. Die Implementierungen sind Wildwuchs, folgen keinen klaren, objektiven Richtlinien und sind daher auch kaum vergleichbar. So sind manche Implementierungen mancher Beispiele parallelisiert, andere wieder nicht, usw. Der Shootout ist eine nette Spielerei, nicht mehr, nicht weniger, und taugt nicht für objektive Vergleiche von Laufzeitumgebungen und Sprachimplementierungen.

http://shootout.alioth.debian.org/u32q/java.php#faster-programs-measurements

Zudem sind die Programme in ihrer Art viel zu klein, um gerade komplexere Laufzeitumgebungen wie die JVM wirklich zu erfassen.

http://shootout.alioth.debian.org/help.php#java

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4687

Wohnort: Berlin

@Isaac Gouy: Könntest Du vielleicht noch dazu schreiben, ob und was Du mit diesen Links sagen möchtest!? Mir ist das jedenfalls, insbesondere im Zusammenhang mit dem zitierten Teilen auf die sie sich beziehen(?), nicht zweifelsfrei klar. Und da Sprachvergleiche immer ein hohes Potential für Flamewars bergen, sollte man versuchen Missverständnisse gar nicht erst aufkommen zu lassen. ☺

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Aber was Java langsamer werden lässt, ist mir nicht ganz klar. OK, es muss ein JVM gestartet werden, was etwas mehr Speicher kostet, aber die eigentlichen Prozesse sollten doch vergleichbar schnell sein.

Was an Java langsamer ist sind wohl der Garbage Collector, die Intialisierung der JVM und allgemein der geringfügig höhrere Abstraktionsgrad (Introspektiven zum Beispiel). Das ist aber längst kein Faktor 10 mehr, wie ja schon of genug gesagt wurde. Das Gerücht hält sich übrigens, weil 80% der Leute die sich zu Computerthemen äußern nur ein gefährliches Halbwissen haben.

Eventuell wäre es für mich sinnvoll dann auf C/C++ umzusteigen, da ich berechnungen mache, die länger laufen, wo ein faktor 10 schon bedeutend wird.

Java bietet mit dem JIN auch die die Möglichkeit C-Code auszuführen. Im Allgemeinen würde ich persönlich dazu raten, die Anwendungsprogramm in einer Sprache der persönlichen Vorliebe zu schreiben und versuchen nur die wenigen Code-Zeilen die laufzeitkritisch sind in einer Hardware nahen Sprache zu schreiben.

Wenn die Laufzeit der Berechnungen für dich übrigens wirklich wichtig ist, lässt du die Sachen von der GPU berechnen: http://de.wikipedia.org/wiki/Compute_Unified_Device_Architecture

Bauer

Anmeldungsdatum:
28. Juni 2006

Beiträge: 333

Es gibt zu jedem Java-Programm* mindestens ein C/C++-Programm**, dass mindestens genauso schnell ist. Umgekehrt gilt das – wenigstens a-priori – nicht. Eine Aussage über das Geschwindigkeitsverhältnis dieser Sprachen ist das aber noch lange nicht, nur um Missverständnissen vorzubeugen.

* bezugnehmend auf die Implementierung von Sun
** lies C oder C++

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Bauer schrieb:

Es gibt zu jedem Java-Programm* mindestens ein C/C++-Programm**, dass mindestens genauso schnell ist.

Und das gilt a-priori, weil …?

Bauer

Anmeldungsdatum:
28. Juni 2006

Beiträge: 333

Weil die JVM in C (oder C++, ich weiß es gerade nicht) geschrieben ist?

Antworten |