Sie sind nicht angemeldet.

np

Junior Schreiberling

  • »np« ist der Autor dieses Themas

Beiträge: 155

Registrierungsdatum: 23.10.2002

1

16.06.2004, 10:53

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:

Quellcode

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

bzw. für Java

Quellcode

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

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

Quellcode

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

Beiträge: 165

Registrierungsdatum: 08.02.2002

Wohnort: SHG

2

16.06.2004, 11:35

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« ist männlich

Beiträge: 2 863

Registrierungsdatum: 11.12.2001

Wohnort: Hämelerwald

Beruf: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

3

16.06.2004, 13:15

RE: Java schneller als C++

Zitat

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

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Joachim« (16.06.2004, 13:17)


np

Junior Schreiberling

  • »np« ist der Autor dieses Themas

Beiträge: 155

Registrierungsdatum: 23.10.2002

4

16.06.2004, 14:17

RE: Java schneller als C++

Zitat

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« ist männlich

Beiträge: 248

Registrierungsdatum: 11.12.2001

5

16.06.2004, 22:24

Zitat

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?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dfex« (16.06.2004, 22:26)


  • »Joachim« ist männlich

Beiträge: 2 863

Registrierungsdatum: 11.12.2001

Wohnort: Hämelerwald

Beruf: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

6

16.06.2004, 22:59

Zitat

Original von dfex

Zitat

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

Beiträge: 150

Registrierungsdatum: 04.02.2003

7

17.06.2004, 11:34

Schaut euch doch mal C# (C Sharp) an

  • »Joachim« ist männlich

Beiträge: 2 863

Registrierungsdatum: 11.12.2001

Wohnort: Hämelerwald

Beruf: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)

8

18.06.2004, 12:26

Zitat

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

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Joachim« (18.06.2004, 12:27)