Dies ist eine statische Kopie unseres alten Forums. Es sind keine Interaktionen möglich.
This is a static copy of our old forum. Interactions are not possible.

np

Junior Schreiberling

  • "np" started this thread

Posts: 155

Date of registration: Oct 23rd 2002

1

Wednesday, June 16th 2004, 10:53am

Java schneller als C++

Folgender interessanter Artikel fiel mir gerade auf:

http://www.sys-con.com/story/?storyid=45250

Kurze Inhaltsangabe: Startet man die JVM mit dem Flag "-server", so läuft sie in einem optimierten Modus, der eine zeiteffizientere Speicherverwaltung erlaubt (bei größerem Resourcenbedarf). Der Autor verglich nun eine Anzahl von Java-Programmen mit ihren (angeblichen) C++-Zwillingen. Es stellte sich heraus, dass C++ immer schneller als Java/Client war, aber Java/Server stets am schnellsten.

Am auffälligsten war dabei, dass sich die Ergebnisse nicht signifikant unterschieden, bis auf einen Fall, in dem es um einen wiederholten Methodenaufruf in einer Klasse ging: Java/Server schlug hier C++ um den Faktor 4-8!

Ich modifizierte also das C++-Programm nach besten Kenntnissen (der Autor gibt in dem Artikel zu, keine Ahnung von C++ zu haben). Das brachte einiges, aber bei größeren Zahlen war C++ noch immer im Nachteil.

Dann fiel mir auf, dass alle Programme mit folgender Zeile beginnen:

Source code

1
int n = ((argc == 2) ? atoi(argv[1]) : 1);

bzw. für Java

Source code

1
int n = Integer.parseInt(args[0]);

Ich entfernte diese Zeilen in beiden Programmen und schrieb stattdessen die gewünschte Iterationszahl direkt ins Programm:

Source code

1
unsigned long n = 2000000000l;

Und siehe: Plötzlich war C++ 3.5 mal so schnell wie Java/Server.

Was lernen wir daraus?

1. Die mit dem gcc gelieferte Standardroutine atoi ist ineffizient implementiert.
2. Benchmark-Tests müssen von Leuten erstellt werden, die sich mit allen beteiligten Sprachen gut auskennen.
3. Java/Server ist beeindruckend schnell.
4. Es ist dumm, Äpfel mit Birnen zu vergleichen.

DominionMADz

Junior Schreiberling

Posts: 165

Date of registration: Feb 8th 2002

Location: SHG

2

Wednesday, June 16th 2004, 11:35am

Moin,

ich habe schon einige dieser so genannten Vergleiche gelesen und immer wieder kommt dort auf "dass, Java ja schneller sei als xyz", aber leider wird immer die Codeausführung überprüft und selten nur die Gesamtperformance, welche bei Java immer von der Funktionalität des Garbage Collctors der JVM abhängt und so die gewonnene Zeit wieder mehrfach verspielt wird, grade bei GUI-Anwendungen fällt das negativ auf :(.

mfg Marco

Zusatz zu oben: 5. Differenzierte Vergleiche bringen mehr ;)

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

3

Wednesday, June 16th 2004, 1:15pm

RE: Java schneller als C++

Quoted

Original von np
4. Es ist dumm, Äpfel mit Birnen zu vergleichen.
Das vor allem.

Zudem ist es heutzutage IMHO eh unsinnig, nur auf die Geschwindigkeit zu schauen. Viel entscheidendere Faktoren sind z. B. Werkzeugunterstützung, Klassenbibliothek, Sicherheit (Stichwort Buffer Overflow). Und bei diesen steht Java ausgesprochen gut da.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

This post has been edited 1 times, last edit by "Joachim" (Jun 16th 2004, 1:17pm)


np

Junior Schreiberling

  • "np" started this thread

Posts: 155

Date of registration: Oct 23rd 2002

4

Wednesday, June 16th 2004, 2:17pm

RE: Java schneller als C++

Quoted

Original von Joachim
[...]
Zudem ist es heutzutage IMHO eh unsinnig, nur auf die Geschwindigkeit zu schauen. Viel entscheidendere Faktoren sind z. B. Werkzeugunterstützung, Klassenbibliothek, Sicherheit (Stichwort Buffer Overflow). Und bei diesen steht Java ausgesprochen gut da.

Nicht zu vergessen: Konsistenz der coding conventions. Es ist in C/C++ ausgesprochen ärgerlich, bei jedem Projekt mit einer neuen Konvention zur Benennung von Variablen, Funktionen, Klassen usw. konfrontiert zu werden, oft unterscheiden sich sogar die Vereinbarungen bzgl. Einrückungen. Das ist in Java sehr angenehm einheitlich. Schöner ist nur noch Python: Hier zwingt einen schon der Compiler vernünftig einzurücken.

dfex

Junior Schreiberling

  • "dfex" is male

Posts: 248

Date of registration: Dec 11th 2001

5

Wednesday, June 16th 2004, 10:24pm

Quoted

Original von np
[...]
3. Java/Server ist beeindruckend schnell.
[...]

Ok, dann möchte ich doch jetzt aber gleich nochmal fragen:
Was bringt einem der Servermode der VM für "normale" Anwendungen mit GUI?!
Also keine extremen Iterationen oder intensive Berechnungen. Halt normale Anwendungsprogramme.
Gibts da dann überhaupt noch einen Vorteil der Server VM?!

Hat jemand schonmal Erfahrungen gesammelt?

This post has been edited 1 times, last edit by "dfex" (Jun 16th 2004, 10:26pm)


  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

6

Wednesday, June 16th 2004, 10:59pm

Quoted

Original von dfex

Quoted

Original von np
[...]
3. Java/Server ist beeindruckend schnell.
[...]

Was bringt einem der Servermode der VM für "normale" Anwendungen mit GUI?!
Also keine extremen Iterationen oder intensive Berechnungen. Halt normale Anwendungsprogramme.
Gibts da dann überhaupt noch einen Vorteil der Server VM?!

Hat jemand schonmal Erfahrungen gesammelt?
Ich persönlich nicht. Aber schau Dir das mal an: http://groups.google.com/groups?threadm=…ws.t-online.com.

Ich denke also eher nicht, daß die Server-VM für GUI-Anwendungen ohne viel Rechenaufwand etwas bringt, eher im Gegenteil.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

Wanja

Junior Schreiberling

Posts: 150

Date of registration: Feb 4th 2003

7

Thursday, June 17th 2004, 11:34am

Schaut euch doch mal C# (C Sharp) an

  • "Joachim" is male

Posts: 2,863

Date of registration: Dec 11th 2001

Location: Hämelerwald

Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

8

Friday, June 18th 2004, 12:26pm

Quoted

Original von Wanja
Schaut euch doch mal C# (C Sharp) an
Diesen Hinweis solltest Du vielleicht noch ein wenig erläutern. ;)

Zum C#/Java-Vergleich fällt mir http://groups.google.com/groups?as_umsgi…1@uni-berlin.de ein. Sehr interessanter Thread.
The purpose of computing is insight, not numbers.
Richard Hamming, 1962

This post has been edited 1 times, last edit by "Joachim" (Jun 18th 2004, 12:27pm)