20000 Meilen über dem Meer



  • Hallo,
    ich bin gerade in der Planungphase für ein neues Projekt, da steht mal
    wieder die alte Entscheidung an: Welche Programmiersprache. Ich muss
    mich entscheiden zwischen Java und C++. Da ich für die Implementierung
    des ganzen Mengen brauche habe die mal kurz getestet und etwas
    festgestellt das mich echt überrascht.

    In kleines C++ Programm, das zwei Mengen mit std::set<int> erstellt.
    eine mit 1.000.000 Einträgen eine mit 1.500.000 Einträgen. Dann berechne
    nich die Schnittmenge des ganzen und speichere das in einer dritten
    Menge. Das gleiche habe ich in JAVA implementiert, einmal mit HashSet,
    einmal mit TreeSet. Der Profiler gibt folgendes Ergebnis:

    C++ Java (hashset) Java (tree)

    8.224 s 3.138 s 8.447 s

    Was mich jetzt wundert: Kann das sein? Warum ist JAVA hier so effizient,
    bzw ist die Implementierung der STL unter Linux und gcc 3.2 so schlecht?

    Gruß
    Sebastian


  • Mod

    Es kann durchaus mal vorkommen, dass Java bei einer bestimmten Aufgabe schneller ist. Das hat aber in der Regel etwas mit der jeweiligen Implementation einer bestimmten Sache in der Standardbibliothek zu tun. Wenn man sich Mühe gibt und beim C++-Programm entsprechend optimiert, dann kann wohl in jedem Fall schneller als das entsprechende Javaprogramm sein. Es gibt genauso gegenteilige Beispiele, bei denen Java-Programme viel langsamer sind, als C++-Programme. Da kann man dann in der Regel aber auch ne Menge aufholen, wenn man entsprechend optimiert. Generell kannst du davon ausgehen, dass ein C++-Programm etwas schneller ist, als ein entsprechendes Javaprogramm. (IMHO Faktor 2-4)

    EDIT :

    1. Hast du das C++-Programm mit Optimierungen kompiliert? (Option -O3 beim g++)

    2. Bei C++-Programmen bringt es IMHO oft etwas, wenn man das Programm auch mal mit einem anderen Compiler kompiliert.

    [ Dieser Beitrag wurde am 09.02.2003 um 02:40 Uhr von Gregor editiert. ]


Anmelden zum Antworten