[Perfromance Benchmark] Java - C++



  • Nachdem ich meinem Prof. ein paar Fragen zu der Performance von Java gestellt habe, sagte er das Java nicht langsamer sei und in vielen Fällen sogar schneller als C++ ist.

    In der Mail fand ich folgenden Link: http://sys-con.com/story/?storyid=45250&DE=1

    Was meint ihr zu dieser Studie?



  • also mit dieser grafik kann ich schonmal gar nichts anfangen. es steht nur dabei länger = besser. nur was ist das bitte für eine einheit?! sieht irgendwie konstruiert aus.
    da findest du auch studien die genau das gegenteil zeigen.

    wie wärs denn wenn java einfach ein anderes einsatzgebiet als c++ hat und beide ihre daseinsberechtigung haben?



  • Inf. Stud. schrieb:

    Was meint ihr zu dieser Studie?

    Dass sie Bloedsinn ist.



  • Persönlich finde ich Java eher lahm. Bestes Beispiel dafür ist eclipse. Deshalb habe ich auch meinen Prof. gefragt, warum wir die meisten Studenten der Angewandten Inf. soviel Java haben, owohl doch C++ viel schneller ist. Das war die Antwortmail.

    borg schrieb:

    also mit dieser grafik kann ich schonmal gar nichts anfangen. es steht nur dabei länger = besser. nur was ist das bitte für eine einheit?! sieht irgendwie konstruiert aus.

    Quelltexte sind doch dabei.

    borg schrieb:

    wie wärs denn wenn java einfach ein anderes einsatzgebiet als c++ hat und beide ihre daseinsberechtigung haben?

    Das dachte ich auch. Aber Java wird genau in der Anwendungsentwicklung eingesetzt. Deswegen werden wir Studenten damit auch in verschiedensten Vorlesungen gefoltert.



  • habe versucht die bewertung nachzuvollziehen, war mir leider nicht moeglich.

    habe auch versucht mir die codes anzusehen, aber mal ehrlich: warum werden solche tests immer von leuten gemacht die zugeben nicht besonders gut c++ zu koennen...?

    auch das aufwaermen ist lustig, sehe in dem konsolenlog nix davon.

    alles in allem ist mir die seite sehr suspekt



  • SoM
    ***

    Schau dir mal die Kommentare dazu an ;).



  • was ist eigentlich der unterschied zwischen "server JVM" und "client JVM"? die "client JVM" ist eigentlich immer langsamer als alle anderen.

    und überhaupt vergleicht er da fast immer äpfel mit birnen. zB die hashmap von java mit der hashmap von c++. beide arbeiten intern anders, toller vergleich. und weil die java-hashmap schneller ist macht er das gleich 2x 😃 .

    wie wärs wenn er mal swing mit Qt/winapi vergleicht, da bin ich ja mal aufs ergebnis gespannt.



  • Hab's mir mal angesehen... kurz & unvollständig, bis dachte ich mir ein Urteil (über diese Performance-Benchmark) erlauben zu können.

    Am besten einfach mal lesen was da steht bezüglich der Testbedingungen...

    Beispielsweise der "String concatenation" Test:

    import java.io.*;
    import java.util.*;
    
    public class strcat {
      public static void main(String args[]) throws IOException {
        int n = Integer.parseInt(args[0]);
        StringBuffer str = new StringBuffer();
    
        for (int i=0; i<n; i++) {
          str.append("hello\n");
        }
    
        System.out.println(str.length());
      }
    }
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
      int i, n = ((argc == 2) ? atoi(argv[1]) : 1);
      string str;
      size_t capacity = 31;
      str.reserve(capacity); // as per C-string
      size_t newLength = 6;
      for (i = 0; i < n; i++)
      {
        if(newLength > capacity)
        {
          capacity *= 2;
          str.reserve(capacity);
        }
        str += "hello\n";
        newLength += 6;
      }
      cout << str.length() << endl;
      return 0;
    }
    

    Noch Fragen bezüglich dieser Benchmark? 🙄

    p.s. War nicht mal in der c't ein ähnlicher Test (zugunsten von .NET)? Wo lustigerweise sämtliche Parameter by-value übergeben wurden und ähnliche Späße?

    edit: code statt quote & eingerückt



  • finix schrieb:

    Beispielsweise der "String concatenation" Test:

    😮

    finix schrieb:

    Noch Fragen bezüglich dieser Benchmark? 🙄

    bestimmt von sun in auftrag gegeben 😃



  • TheTester schrieb:

    Schau dir mal die Kommentare dazu an ;).

    oha, habe ich garnicht gesehen.

    viele kommentare sind bloedsinn, aber einige stimmen.



  • borg schrieb:

    was ist eigentlich der unterschied zwischen "server JVM" und "client JVM"? die "client JVM" ist eigentlich immer langsamer als alle anderen.

    Die Server VM ist auf hohe "Throughput"-Performance optimiert, während die Client VM auf geringe Latenzzeiten optimiert ist.
    Beispielsweise benutzt die Server VM einen sehr viel größeren Heap, so dass eine volle Garbage Collection schon mal ne Sekunde dauert anstatt ein paar ms. Dafür wird insgesamt der GC sehr viel seltener ausgeführt und letztlich wird insgesamt weniger Zeit mit GC verbracht als bei der Client VM.
    Der JIT-Compiler hat außerdem eine bessere dynamische Optimierung und sehr viel höhere Compilierzeiten im Gegenzug.



  • Letztlich lohnt sich die Server VM nur bei lange laufenden Programmen (per Parameter einstellbar), ich kann mir aber durchaus vorstellen, dass der Server-JIT einige C++ Compiler gut schlagen kann, weil er sich zur Compilierung schon die Zeit nimmt, die er für richtig hält, was normalerweise bei JIT-Compilern das Problem ist. Und die dynamische Optimierung kann einiges bringen, was bei C++ zur Zeit brach liegt (ma gucken, ob Whidbey VC++ mit der "profile guided optimization" da abhilft).
    Solche generellen Aussagen sind aber IMHO trotzdem Unsinn.



  • borg schrieb:

    was ist eigentlich der unterschied zwischen "server JVM" und "client JVM"? die "client JVM" ist eigentlich immer langsamer als alle anderen.

    bei server jvm vergleichst du antwortzeiten usw.,
    bei client jvm vergleichst du swing-gui mit nativer-gui antwortzeiten

    und bei vielen benchmarks (ohne gui) hat java schon bewisen das es c++ das wasser reichen kann



  • Also sagen wir der Test ist Schrott. Man soll immer nach Einsatzgebieten die Sprache wählen. Wo liegen dann eurer Meinung die Einsatzgebiete von Java und C++?



  • Die Tests sind schrott - basta. Am besten diesen Thread hier schliessen, die ewigen Java vs. C++ Threads nerven.



  • wtf? könnt ihr mal so reden das ichs verstehe? nachdem ich bei optimizers post erst herausfinden musste was 'Throughput-Performance' und 'Latenzzeit' meint, verstehe ich dein posting gar nicht.

    Gerard schrieb:

    bei server jvm vergleichst du antwortzeiten usw.,
    bei client jvm vergleichst du swing-gui mit nativer-gui antwortzeiten

    die server jvm ist für console und die client jvm für gui oder was willst du mir damit sagen?

    Gerard schrieb:

    und bei vielen benchmarks (ohne gui) hat java schon bewisen das es c++ das wasser reichen kann

    ... ich ess halt lieber birnen als äpfel.



  • vergiss mein post, habe an was andes gedacht



  • Inf. Stud. schrieb:

    Wo liegen dann eurer Meinung die Einsatzgebiete von Java und C++?

    Du brauchst dir nur die Standardbibliotheken der Sprachen ansehen, dann weißt du sehr schnell, wo deren Einsatzgebiete liegen bzw. auf Dauer liegen werden. In der Standardbibliothek und in den Sprachfeatures von C++ fehlt ziemlich viel, was bei der Anwendungsentwicklung benötigt wird. Man will in der Standardbibliothek ja nichts haben, was nicht bei allen Plattformen Sinn macht, also nimmt man auf den berüchtigten Toaster Rücksicht und wundert sich dann irgendwann, wenn das Einsatzgebiet der Sprache auf solche Toaster und ähnliche Dinge zurückgedrängt wird.

    C++ hatte lange Zeit einen erheblichen Vorteil gegenüber Java, was die Performance betrifft. Da hat C++ auch immer noch einen gewissen Vorteil, der aber ziemlich geschrumpft ist. Früher war C++ gegenüber Java um einen Faktor 50 oder so schneller und heute ist es vielleicht im Großen und Ganzen noch Faktor 2, 3 oder vielleicht sogar 4, wenn man einen guten C++ Programmierer hat, der entsprechenden Aufwand in den Code steckt. Es gibt Bereiche, in denen das noch ein ganz erheblicher Vorteil für C++ ist. Die Spieleprogrammierung ist beispielsweise so ein Bereich. Für die Anwendungsentwicklung ist es aber oft nicht so wichtig, noch das letzte aus dem Computer rauszuholen. Heutige PCs bieten so viel Rechenleistung, dass dieser Vorteil von C++ gegenüber Sprachen wie Java oder auch C# kaum mehr ins Gewicht fällt und die PCs werden sicherlich nicht langsamer. In naher Zukunft kommen stattdessen Prozessoren mit mehreren Kernen auf den Markt, die wohl in ein paar Jahren üblich sein werden. Da macht sich eine Sprache, die von sich aus keinerlei Unterstützung für Threads liefert nicht besonders gut.

    @Inf. Stud.: Was dir dein Professor da geschrieben hat, hat trotz der Tatsache, dass man so ziemlich jeden Benchmark runtermachen kann, einen wahren Kern. Sicherlich kann man sowohl bei den Javaprogrammen als auch bei den C++ Programmen, die dort verglichen wurden, noch etwas rausholen und bestimmt ist das im C++ Fall auch mehr als im Javafall. Die Realität ist aber, dass nicht jeder Programmierer die von ihm genutzten Sprachen bis ins letzte kennt und darauf achtet, alle Probleme zu umschiffen. Nimm einen Programmierer, der mit beiden Sprachen mittelmäßige Erfahrung hat, dann kann so ein Code durchaus dabei herauskommen. Der Javacode kommt da dann eher an das Java-Optimum heran, weil die Sprache einfacher gehalten ist und man insgesamt weniger falsch machen kann. Beim C++ Code ist das genau andersherum: Die Sprache ist kompliziert und es gibt allerlei Dinge, die man beachten und kennen muss, wenn man schnellen Code schreiben will. Man muss für C++ mehr Zeit investieren, um auf ein Level zu kommen, auf dem man guten Code produziert. Bei Java hat man so ein Level schneller erreicht.

    Wenn du also angewandte Informatik studierst, dann ist eine Sprache wie Java oder C# in der Ausbildung besser als C++, auch wenn C++ geringfügig schneller sein kann. Bis du im Beruf bist, wird C++ nahezu keinerlei Bedeutung für die Anwendungsentwicklung mehr haben. Das liegt auch an der unglaublich langsamen und zähen Entwicklung von C++. Wenn man da 10 Jahre benötigt, um einen Standard herauszubringen und dann vielleicht nochmal 10 Jahre für den nächsten, dann sollte man sich mal überlegen, ob man in dieser schnelllebigen IT-Branche richtig ist. (Jetzt kommen gleich die C++ Jünger und erzählen dir, dass man eine schnelle Entwicklung von C++ nicht erwarten könne, da dort keine Firma wie MS oder Sun hintersteht, die die Entwicklung vorantreibt. Und? Pech! Dann war es das halt für C++.)



  • schon mal überlegt, dass c(++) und java auch nur mit wasser kochen? ein a++ oder 3+4 ist in java genauso schnell wie in c(++). eine vm macht auch nur eine maschinencode umsetzung. ich bin durchaus der meinung, dass sich die sprachen in geschwindigkeit nichts schenken, weil sie in den fast gleichen asm codes enden. also wenn ich algorithmen nehme, und jeweils über die "normalen" zugriffe gehe (z.b. konventioneller array index), werden die sprachen wohl fast gleich schnell sein. zeitfaktoren sind nur die GC bei java, und so spracheigenschaften wie pointerarithmetik, die man sich bei manchen datenalgorithmen zunutze machen kann. aber auch java bietet solche vorteile (siehe z.b. dieser hashmap vergleich). nagut, die vm braucht etwas zum abstarten, aber das ist auch schon alles.
    die zeiten in denen java langsam ist, die sind vorbei, definitiv. wenn ihr alle so an eclipse rumheult. schaut mal an, wie es aufgebaut ist und was es alles kann. das dings besteht nur aus plugins. mach sowas mal mit c(++) möchte sehn, wie das dings läuft...



  • Korbinian schrieb:

    die zeiten in denen java langsam ist, die sind vorbei, definitiv. wenn ihr alle so an eclipse rumheult. schaut mal an, wie es aufgebaut ist und was es alles kann. das dings besteht nur aus plugins. mach sowas mal mit c(++) möchte sehn, wie das dings läuft...

    Naja, ich war von Eclipse geschockt. Ich habe ein bißchen Midlets für mein Handy programmiert und mir dafür Eclipse installiert, das ist ja ein Witz. Auf einem 2.4GHz-Rechner laggt die Eingabe mit Syncol teilweise, und wenn man die "Was gibt es für Parameter"-Hilfe im Editor (z.B. für Parameter, etc) aufmacht, kann man erst Mal Kaffee trinken gehen... ich weiß nicht, was man da für ein System braucht, damit es flüssig läuft.

    Und wenn Du eine IDE aus lauter Plugins bestehend sehen willst, die RAST, dann schau Dir den VC7 an. Guck Dir mal an, wie da im Editor die direkte Hilfe für den Syntax aufmacht fliegt einem die Box entgegen (auf dem gleichen PC). Und das Ding besteht auch nur aus COM-Objekten, die über eine Menüleiste verzahnt sind, und man kann ebenfalls eigene Plugins einbinden.

    Abgesehen davon sehe ich noch nicht, wieso die Möglichkeit von Plugins zu hohen Latenzzeiten beim Tippen führen darf.

    Auf jeden Fall war ich maßlos enttäuscht. Dachte der JBuilder wäre lahm, aber Eclipse...



  • Ich denke das technische Dinge wohl nicht entscheiden werden,
    was sich auf dem Massenmarkt durchsetzt. Windows zeigt ja,
    das man mit Marketing weiter kommt, als damit Qualität.
    Hinter Java steht Sun, und Sun kann in den Bereichen,
    in denen die Entscheidung für Firmenweite Softwareentwicklung
    getroffen wird, mit argumenten punkten, wie Plattformunabhängigkeit,
    flexiblilität und eben solchen Studien wie sie hier gepostet wurden.
    Das beeindruckt die Leute, und die jenigen die die Entscheidungen
    treffen, haben vielleicht mal C oder Cobol programmiert, haben
    aber keine Ahnung von Softwareentwicklung. Zu dem kann man mit
    Eclipse auch noch ein kostenloses Tool für die Entwicklung nutzen.
    Für C# gilt ähnliches, da ist MS, und auch sie bieten den
    Support den Sun bietet, und mit Mono wird C# auch noch Plattformunabhängig,
    irgendwann.
    C++ dagegen ist eine Freie Sprache, kein Produkt einer Firma wie Java
    oder C#, von daher gibt es auch keine grosse Firma/Organisation die
    es bewirbt, bzw. verkauft. Ich glaube das das ein Nachteil für C++ ist,
    denn langfristig entscheidet auch Marktmacht über das für und wieder einer
    Sprache. Man kann nur hoffen das bald der neue Standard kommt, und somit
    es evtl. auch eine erweiterte STL gibt, die mehr kann als ein Toaster braucht...

    Devil


Anmelden zum Antworten