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
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
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
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
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
Ehemalige
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?
|