Das ewige Thema Java-Performance



  • CarstenJ schrieb:

    Kein Problem, das war es wert. (Ich hoffe nur, das wird nicht gelöscht 🤡 )

    ICH hoffe, dass der Thread jetzt geschlossen wird. 😃



  • SirLant schrieb:

    Und wie soll ein Javaprogramm schneller sein als ein kompilliertes Programm? Dazu müsste die JVM entfernt werden und das javaprogramm ebenfalls kompilliert werden, da die JVM ganz einfach auch Zeit braucht welche sie dem Programm nunmal klauen muss.

    Nein. Das ist alleine schon deshalb falsch, weil du von einer idealisierten Welt ausgehst, in der die Compiler nicht suboptimale Programme sind, die von Menschen programmiert wurden, sondern perfekte Programme, die den optimalen Output produzieren. Davon ist man weit entfernt. Aus diesem Grund haben solche theoretischen Betrachtungen, wie "die JVM braucht ja selbst auch Zeit" keinerlei Bedeutung.

    Gleiches gilt für die Standardbibliotheken usw.!

    (ich komm jetzt mal nicht mit Argumenten wie "Die JVM hat zur Laufzeit mehr Informationen zur Optimierung zur Verfügung als es normale Compiler haben")

    Abgesehen davon müssen Java-Programme überhaupt nicht schneller als C++-Programme laufen: Früher war die Performance von Java ein Grund gegen Java. Es geht ja nur darum, dass dieser Nachteil von Java größtenteils verschwunden ist. Es reicht vollkommen, dass Java relativ nah an C++ herangekommen ist, was die Ausführungsgeschwindigkeit der Programme betrifft. Wenn sich jemand nicht mehr fragt, wieviel langsamer Java ist, sondern ob Java oder C++ schneller ist, dann zeigt er, dass er den Grund für diese Vergleiche nicht mehr kennt. Wenn die Frage so lautet, dann hat Java also in jedem Fall schon gewonnen.



  • GPC schrieb:

    An alle die meine vermeintliche Inkompetenz in C++ rügen: Zählt mir mal diese enormen Entwicklungen von C++ auf!

    1
    2 ...
    to be continued



  • Gregor schrieb:

    SirLant schrieb:

    Und wie soll ein Javaprogramm schneller sein als ein kompilliertes Programm? Dazu müsste die JVM entfernt werden und das javaprogramm ebenfalls kompilliert werden, da die JVM ganz einfach auch Zeit braucht welche sie dem Programm nunmal klauen muss.

    Nein. Das ist alleine schon deshalb falsch, weil du von einer idealisierten Welt ausgehst, in der die Compiler nicht suboptimale Programme sind, die von Menschen programmiert wurden, sondern perfekte Programme, die den optimalen Output produzieren. Davon ist man weit entfernt. Aus diesem Grund haben solche theoretischen Betrachtungen, wie "die JVM braucht ja selbst auch Zeit" keinerlei Bedeutung.

    Aber die JVM ist ja auch nicht perfekt wodurch sich dies ja wieder ausgleicht.



  • MaSTaH schrieb:

    1

    Sollen wir uns jetzt die 100 Links durchlesen? Warum bringst du nicht einfach ein paar Beispiele, was sich an der Sprache C++ die letzten Jahre so geändert hat?

    2 ...

    Das ist keine Verbesserung/Weiterentwicklung der Sprache sonder lediglich eine weitere Bibliothek.



  • SirLant schrieb:

    Aber die JVM ist ja auch nicht perfekt wodurch sich dies ja wieder ausgleicht.

    Du hast keinerlei Daten darüber, was wie gut programmiert wurde. Also kannst du auch keine Aussage darüber treffen, ob sich soetwas ausgleicht. Vielleicht ist es ja auch so, dass es dank der geringeren Komplexität leichter ist, einen sehr guten Jitter für Java zu schreiben, als einen sehr guten Compiler für C++. Wer weiß.

    Mein Punkt ist ja auch nur, dass man mit einer solchen Argumentation nicht weiter kommt. Wenn man wissen will, wie sich verschiedene C++-Compiler und verschiedene JVMs in ganz bestimmten Fällen verhalten, dann muss man entsprechende Messungen machen.



  • interpreter schrieb:

    Warum bringst du nicht einfach ein paar Beispiele, was sich an der Sprache C++ die letzten Jahre so geändert hat?

    Seit 1998 hat sich AFAIK nichts mehr verändert, aber natürlich wird schon die ganze Zeit an einer Überarbeitung der Sprache gearbeitet. Bei C++ läuft das Verfahren halt etwas anders als bei Java oder meinetwegen C# ab. Bei Java gibt es vielleicht alle 2 Jahre eine neue Version, bei C++ vielleicht alle 10 Jahre. Das heißt aber nicht, dass sich Java schneller als C++ entwickelt. Die Unterschiede zwischen den einzelnen Javaversionen sind nicht sooo groß. Vielleicht macht C++ diesbezüglich viel größere Schritte.

    Abgesehen davon ging es hier doch um Performance, oder? Das hat nichts mit der Entwicklung der Sprache zu tun, sondern mit der Entwicklung der Compiler, mit der Entwicklung von Standardbibliotheken usw.!



  • interpreter schrieb:

    MaSTaH schrieb:

    1

    Sollen wir uns jetzt die 100 Links durchlesen? Warum bringst du nicht einfach ein paar Beispiele, was sich an der Sprache C++ die letzten Jahre so geändert hat?

    Warum liest du nicht einfach ein paar Links? Warum soll ich dir hier einen fertigen Text präsentieren? Das sollte nur zeigen, dass die Entwicklung von C++ nicht stagniert (wie ja vom Threadersteller behauptet wurde).

    interpreter schrieb:

    Das ist keine Verbesserung/Weiterentwicklung der Sprache sonder lediglich eine weitere Bibliothek.

    ...die aber in Teilen in den neuen Standard einfließen wird. Das war auch nur die indirekte Antwort auf die Aussage des Threaderstellers, dass die Swing-Library ständig weiterentwickelt wird (früher im Thread). Was hat das bitte mit der Sprache Java zu tun?



  • MaSTaH schrieb:

    ...die aber in Teilen in den neuen Standard einfließen wird. Das war auch nur die Antwort auf die Aussage des Threaderstellers, dass die Swing-Library ständig weiterentwickelt wird. Was hat das bitte mit der Sprache Java zu tun?

    Swing gehört zur Standardbibliothek von Java und gilt seit langer Zeit als Performance-Schwachpunkt (was mir persönlich noch nicht aufgefallen ist). Da es in diesem Thread um Performance geht, ist es doch vollkommen normal, wenn darauf hingewiesen wird, dass an Swing und der Swing-Performance ständig Verbesserungen vorgenommen werden. In jeder neuen Javaversion wird Swing ein gutes Stück schneller.



  • MaSTaH schrieb:

    Warum liest du nicht einfach ein paar Links? Warum soll ich dir hier einen fertigen Text präsentieren? Das sollte nur zeigen, dass die Entwicklung von C++ nicht stagniert (wie ja vom Threadersteller behauptet wurde).

    Die letzten 6,7,8 usw stagniert die Entwicklung der Sprache C++ sehr wohl. M

    ...die aber in Teilen in den neuen Standard einfließen wird.

    Einfließen wird. Und wann kommt der? In 4 Jahren? 5 Jahren? ...

    Das war auch nur die indirekte Antwort auf die Aussage des Threaderstellers, dass die Swing-Library ständig weiterentwickelt wird (früher im Thread). Was hat das bitte mit der Sprache Java zu tun?

    Nichts. Dennoch unterliegt die Sprache Java einer ständigen Weiterentwicklung (Generics, Autoboxing usw).



  • Hat ja niemand bestritten, aber ich wollte nur klarstellen, dass an C++ auch gearbeitet wird. Wenn man wüsste wann der neue Standard kommt würde man wohl kaum C++ 0x schreiben. 0x legt aber nahe, dass es wohl noch in diesem Jahrzehnt so weit sein wird. Bei Java wird einfach immer in kleineren Happen mit den Neuerungen rausgerückt, was den Anschein erweckt die Sprache sei "lebendiger".

    Btw. kann man boost auch nutzen ohne auf den neuen Standard zu warten.



  • Außerdem steht hinter Java eine Firma, was der Weiterentwicklung natürlich hilfreich ist.



  • interpreter schrieb:

    Außerdem steht hinter Java eine Firma, was der Weiterentwicklung natürlich hilfreich ist.

    Klar, die müssen nicht erst um Geld betteln gehen irgendwo.



  • MaSTaH schrieb:

    Bei Java wird einfach immer in kleineren Happen mit den Neuerungen rausgerückt, was den Anschein erweckt die Sprache sei "lebendiger".

    Die Erweiterungen an der Standardbibliothek sind jedesmal so gigantisch, dass da jedesmal die ganze C++ stdlib mehrmals reinpassen würde (gut, dass heißt jetzt immer noch nicht viel. :p ).



  • Was heißt schon Standard? Und wie lange dauert es bis sich die Compilerbauer an den aktuellen ANSI Standard angepasst haben? 1,2 oder 3 Jahre?
    Btw: Liebe Grüße an Microsoft 😃



  • Zum Punkt Performance:

    Der BitTorrent Client Azureus ist komplett in Java geschrieben, ohne dass man
    davon etwas mitbekommt. Die GUI ist genauso schnell wie bei anderen Programmen
    genauso die Ladezeit.

    Hätte ich nicht zufällig gelesen, dass das Programm in Java geschrieben ist
    hätte ich das nicht mitbekommen.

    MfG,

    EnERgYzEr



  • Na ja, der Unterschied ist, dass die Entwicklung von C++ im Gegensatz zu Java eher dezentral verläuft: Sun schmeißt halt ne neue Version raus, wenn es ihnen passt. Das hat zur Folge, dass sie immer ein JDK haben, dass den neuen Standard unterstützt. Die Programmierer eines Compilers für C++ müssen den Standard ersteinmal vorliegen haben, bevor sie überhaupt anfangen können, die Unterstützung dafür einzubauen. Wahrscheinlich ändert sich der Standard für C++ deshalb nicht so schnell, damit die Compilerentwickler nicht ständig dem Standard hinterherrennen, was je nach Design des Compilers eine relativ verzwickte Angelegenheit sein kann.

    Die Frage ist auch viel mehr, ob es überhaupt nötig ist, dass sich der C++-Standard so schnell ändert: Es gibt eine große Anzahl an frei verfügbaren Bibliotheken für alle möglichen Einsatzzwecke, die von tausenden Programmierern in aller Welt ständig weiterentwickelt werden. Viele dieser Bibliotheken sind für mehrere Betriebssysteme verfügbar. Es stimmt also nicht, dass sich C++ nicht weiterentwickelt, die Entwicklung wird nur nicht von einer einzigen Firma diktiert.

    Zu Bittorrent: Mit welchem Client vergleichst du deinen Java-Client? Der originale Bittorrent-Client ist in Python geschrieben, also ebenfalls interpretiert. Just in case... 😉



  • @Steven: Ich vergleiche mit gar keinem Client sondern war im Allgemeinen über
    die Performance überrascht. Wenn ich da noch an das Maguma Studio für PHP denke
    (das war es doch das in Java geschrieben wurde, oder)... Das hatte wirklich
    geschlichen, worauf ich mir gesagt hatte - nie wieder Java. Aber bei Sun
    man hat wohl gelernt, denn von Azureus war ich absolut positiv überrascht.



  • MaSTaH schrieb:

    Wenn man wüsste wann der neue Standard kommt würde man wohl kaum C++ 0x schreiben. 0x legt aber nahe, dass es wohl noch in diesem Jahrzehnt so weit sein wird. Bei Java wird einfach immer in kleineren Happen mit den Neuerungen rausgerückt, was den Anschein erweckt die Sprache sei "lebendiger".

    1. Mir hat letzt mal wer gesagt, dass man teilweise schon von C++1x statt C++0x redet. Keine Ahnung, was da dran ist.

    2. Aus meiner Sicht stellt sich die Frage, ob man mit sehr langen Release-Zyklen in der IT-Branche überhaupt bestehen kann. Wenn C++ zwischen den einzelnen Schritten immer 10 Jahre lang schläft, dann ist es sehr wahrscheinlich, dass sich in dieser Zeit ernsthafte Alternativen etablieren, weil diese einfach mehr Up-To-Date sind. Java und C# sind in diversen Anwendungsgebieten solche Alternativen.



  • Steven schrieb:

    die Entwicklung wird nur nicht von einer einzigen Firma diktiert.

    Das ist bei Java auch nicht der Fall. Die Entwicklung von Java wird durch den Java Community Process gesteuert. Ich schätze einfach mal, dass in diesem mehr als 1000 Firmen und Individuen organisiert sind, die die Entwicklung von Java vorantreiben. Es gibt im JCP 2 Gremien, die die Entscheidungen treffen. Suns herausragende Stellung wird hier nur dadurch sichtbar, dass Sun ein ständiges Mitglied in diesen Gremien ist. Ansonsten hat Sun auch nicht mehr Stimmberechtigung als die jeweils 14 anderen Mitglieder.


Anmelden zum Antworten