Ein vielgehörtes Vorurteil gegenüber Java ist, Java ist langsam. Oft kommt diese Behauptung von Programmieranfängern oder C-Programmierern. Ich bin der Meinung, das sollte man erstmal nachweisen. Dafür mangelte es mir aber an zwei Dingen, einem guten C-Programmierer und einer passenden Aufgabe. Einen C-Programierer hätte ich gefunden aber das auswählen einer passende Aufgabe ist nicht trivial. Denn wie heisst es, wer misst misst Mist. Aber es gibt auch für dieses Problem eine passende Antwort im Netz. Auf der Seite http://www.shudo.net/jit/perf/ werden die Geschwindigkeiten verschiedner Java-VMs verglichen und es wird auch .Net und C einbezogen. Auch wenn die Resultate aus 10/2004 stammen, so dürften sie auch noch heute gültig sein. Eine neue Frage wirft sich bei den heutigen Mulit-Core-CPUs auf, wie gut skalieren die VMs, diese Frage wurde damals noch nicht beantwortet. Zu den Antworten, die Messergebnisse zeigen einige deutliche Ergebnisse, C und Java sind ähnlich schnell beim Linpack und SciMark, der Vorsprung für C liegt im Bereich von 6%. Die Interpreter (Java, C#) sind immer weit abgeschlagen. Die VMs von Sun liegen in der Regel vorn. Die Server-VM ist schneller als die Client-VM.
Aber kein Vorurteil ohne wahren Kern. Die früheren Java-Versionen waren langsamer, Sun hat viel Zeit und Ideen in die Optimierung des JIT gesteckt. Heute ist man mit Java nicht langsamer als mit C, wichtig ist vor allem, dass die Programmierer wissen, was sie programmieren und was dies aus Sicht der CPU bedeutet. Diese Überlegungen dürften in Regel mehr Performance-Schub bringen als der Wechsel von Java zu C. Was bei den obigen Benchmarks auch nicht getestet wurde, war die Geschwindigkeit des graphischen Systems. Diese ist bei Java-Anwendungen in Architektur-bedingt niedriger. Aber auch hier hat Sun viel getan um die Geschwindigkeit zu steigern. Ich hoffe das Oracle genauso viel Zeit investiert um Java weiter zu entwickeln.
Nachtrag:
Hier ist nach ein weiterer interessanter Beitrag zum Thema Java Performance im Vergleich, leider auch schon von 2004:
http://www.idiom.com/~zilla/Computer/javaCbenchmark.html
http://www.ibm.com/developerworks/java/library/j-jtp09275.html
Super Erklärung, hat mir sehr weitergeholfen, da ich selber am zweifeln war, danke :)
AntwortenLöschen:-)
AntwortenLöschenIch habe noch ein paar weitere Quellen gefunden. ich werde sie mal ergänzen.