symlink.ch
Wissen Vernetzt - deutsche News für die Welt
 
symlink.ch
FAQ
Mission
Über uns
Richtlinien

Moderation
Einstellungen
Story einsenden

Suchen & Index
Ruhmeshalle
Statistiken
Umfragen

Redaktion
Themen
Partner
Planet

XML | RDF | RSS
PDA | WAP | IRC
Symbar für Opera
Symbar für Mozilla

Freunde
Benutzergruppen
LUG Switzerland
LUG Vorarlberg
LUGen in DE
SIUG
CCCZH
Organisationen
Wilhelm Tux
FSF Europe
Events
LinuxDay Dornbirn
BBA Schweiz
CoSin in Bremgarten AG
VCFe in München
Menschen
maol
Flupp
Ventilator
dawn
gumbo
krümelmonster
XTaran
maradong
tuxedo

 
Java schneller als C++?
Veröffentlicht durch maradong am Mittwoch 16. Juni 2004, 06:42
Aus der mystischen Abteilung
Programmieren OSNews berichtet in einer Nachricht, daß Java unter der JVM 1.5 20% schneller ist als C, und mit einer ServerVM bis zu 2-3 mal schneller (PDF) ist als C++. Verlinken tut OSNews auf einen Benchmark-Test, von Keith Lea. Die Source der diversen Testprogramme kommen vom Great Computer Language Shootout. Slashdot hat auch einen Artikel dazu.

Polizei hoffnungslos gegen Musik-Schwarzkopierer | Druckausgabe | Linux Kernel 2.6.7 veröffentlicht  >

 

 
symlink.ch Login
Login:

Passwort:

extrahierte Links
  • Java
  • OS News
  • Slashdot
  • Nachricht
  • 2-3 mal schneller (PDF)
  • Benchmark-Test
  • Keith Lea
  • Great Computer Language Shootout
  • Artikel
  • Mehr zu Programmieren
  • Auch von maradong
  • Diese Diskussion wurde archiviert. Es können keine neuen Kommentare abgegeben werden.
    Wenn das stimmt... (Score:2)
    Von kuckuck am Wednesday 16. June 2004, 07:22 MEW (#1)
    (User #818 Info) http://www.commandline.ch
    ...kann ich endlich in meiner lieblingssprache programmieren. Java ist einfach eine wunderschöne Programmiersprache.
    /* Nur wer schneller ist als der Strom hat die Kontrolle! */
    Re: Wenn das stimmt... (Score:1)
    Von boomi (symlinkleser@number.ch) am Wednesday 16. June 2004, 08:28 MEW (#4)
    (User #1126 Info) http://www.number.ch
    Java ist ein Krueppel, nix von wunderschoen. Wenn jemand schon seine eigene VM bastelt, warum macht er dann so ne laue Sprache dazu? Nur dass Java schoener ist als C++ will nix heissen: Java ist immer noch eine primitive Sprache. Ich hab das nur fuer den Fall gesagt... falls jemand deinen Sarkasmus nicht versteht ;)

    http://www.paulgraham.com/javacover.html

    Und noch eine "schoene" Programmiersprache:
    http://people.csa.iisc.ernet.in/sreejith/frontends/spl/spl.htm
    Re: Wenn das stimmt... (Score:0)
    Von Anonymer Feigling am Wednesday 16. June 2004, 13:21 MEW (#20)
    http://www.paulgraham.com/javacover.html

    der Artikel ist veraltet: 3 Jahre sind in der IT viel, sehr viel.
    Re: Wenn das stimmt... (Score:1)
    Von boomi (symlinkleser@number.ch) am Wednesday 16. June 2004, 13:40 MEW (#22)
    (User #1126 Info) http://www.number.ch
    Aber er sagt sehr schoen, warum Java nicht gut sein kann! Punkt.
    Re: Wenn das stimmt... (Score:1)
    Von bass (micha@hanfacker.ch.remove) am Wednesday 16. June 2004, 15:11 MEW (#26)
    (User #11 Info) http://micha.hanfacker.ch/
    Sorry, aber dieser Typ schreibt nur Bullshit. Wahrscheinlich um seine 'eigene' (Arc) Sprache zu bewerben.
    Aber jeder der genügend in der Kappe hat, kann sich ja zum Glück seine eigene Meinung bilden.

    kleines Beispiel:
    Anti-Java: Historically, languages designed for other people to use have been bad[..] The good languages have been those that were designed for their own creators[..]

    Pro-Arc: Our[...]goal to design a language for good programmers. (doch für andere??)

    Hätte er doch nur mal Java genauer angeschaut..
    Re: Wenn das stimmt... (Score:1)
    Von boomi (symlinkleser@number.ch) am Wednesday 16. June 2004, 16:14 MEW (#27)
    (User #1126 Info) http://www.number.ch
    Hmm, aus den Zitaten die du von ihm machst ergibt sich folgender Zusammenhang: "Dieser Typ" glaubt, dass er selbst ein guter Programmierer ist. Was hat das mit seiner Aussage ueber Java zu tun?

    > Hätte er doch nur mal Java genauer angeschaut..

    Und was haette er gefunden?
    - Halbherzig objektorientierte Sprache (Unterscheidung in primitve Typen und Objekte?)
    - Primitive Flow Control ('switch' kann nicht mal Strings vergleichen?)
    - Klappriges Event-Handling (ich versuch grad rauszufinden wie man das Zeug einigermassen sauber benutzt)

    Den Link hab ich gepostet weil ich eigentlich nicht auf die technische Ebene runterwollte. Java ist wirklich eine verdummte Sprache, genau wie er das beschreibt.

    Sonst kann man auch das hier lesen :)
    http://www.orton.demon.co.uk/ff/cpp_interview.html
    Re: Wenn das stimmt... (Score:0)
    Von Anonymer Feigling am Wednesday 16. June 2004, 18:48 MEW (#28)
    Er glaubt aber auch dass er alles weiss und zusätzlich noch hellseherische Fähigkeiten aufweist. (er zählt COBOL zu den gescheiterten Sprachen??)

    Eigentlich wollte ich zeigen, dass die Auflistung Schwachsinn ist und oft falsch.

    >Halbherzig objektorientierte Sprache
    - Doppelherzig implementierte Datentypen. Du kannst wählen, ob du die nativen Datentypen oder lieber deren Objekte benutzen willst. (macht es einen Sinn ein Objekt für eine Zählvariable in einer Schlaufe zu benutzen?)

    >'switch' kann nicht mal Strings vergleichen?
    - ersetze das switch durch eine implementierung des strategy pattern von GoF

    >ich versuch grad[...]
    - und (ver)urteilst es schon, passt zu deinem Vorbild..

    >Java ist wirklich eine[...]
    Glaub einfach nicht alles, sondern finde es selbst heraus.

    Ich finde keine Programmiersprache dumm. Und hast Du auch eine eigene Meinung, oder nur Links?
    Re: Wenn das stimmt... (Score:0)
    Von Anonymer Feigling am Wednesday 16. June 2004, 19:15 MEW (#30)
    ich gebe mal
    (2:Punkte, Informativ) leider Annonymous ;)

    Re: Wenn das stimmt... (Score:1)
    Von boomi (symlinkleser@number.ch) am Wednesday 16. June 2004, 23:12 MEW (#34)
    (User #1126 Info) http://www.number.ch
    - die nativen Datentypen oder lieber deren Objekte benutzen
    Es waere einfacher, wenn ein int einfach ein Int waere und wie ein Objekt behandelt werden koennte wenn noetig. Java kennt ja den Type jeder Variable, also wuerde das 0 Overhead geben (Ausser beim Compiler)

    - strategy pattern von Go
    hm, ich sehe nicht wie mir eine Strategy Pattern weiterhilft. Ich moechte eigentlich ein einfaches switch mit Strings machen koennen. Verschachtelte case Statements werde ich hoffentlich nie machen.

    - und (ver)urteilst es schon
    Muss ich zehn Jahre Erfahrung haben um ueber etwas zu fluchen?

    - Glaub einfach nicht alles, sondern finde es selbst heraus.
    Bin dabei, ich koennte noch einige Dinge aufzaehlen die mir nicht passen...

    - Ich finde keine Programmiersprache dumm.
    Ich schon. Aber 'dumm' ist halt ein starkes Wort, sagen wir halt 'beschraenkt'. Java ist einfach irgendwo liegengeblieben, auf halbem Weg von C zur high-level Sprache. Was haeltst denn du von Java?
    Re: Wenn das stimmt... (Score:0)
    Von Anonymer Feigling am Wednesday 16. June 2004, 18:56 MEW (#29)
    _FLOWControll_

    Das Switch keine Stringvergleiche macht, mag einigen Programmierern (welche an Skriptsprachen
    gewöhnt sind) als Nachteil erscheinen,

    aber in anbetracht dessen das ein "String" in JAVA
    theoretisch 2gb gross sein kann, und im 2byte Unicode codiert ist, wären Stringvergleiche
    in Reihe (wie bei switch mit primitiven Typen (int/char)) schlichtweg ein Overkill,

    zumal bei switch auch vielen Programmierern
    ein AcidentalFallThrough passieren kann
    (break; vergessen)

    dafür gibt es die Methoden der String Klasse(die ein matching bereitstellen) und die darin implementierten Methoden des "java.util.regex", die den Vorteil haben das man sie Problemlos zur Laufzeit ändern kann, und der RegexCompiler die Anweisungen neu übersetzt.

    - realisiert man soetwas mit Switch nimmt
    die Länge dieser starren Struktur mit
    der Anzahl der Variationen zu,

    Vorauswahl durch parsen und dann wenn
    man die Komplexität runtergebrochen hat,
    eine elegante Matchingtabelle die
    Verweise auf Methoden im Falle eines Matchings enthält, sofern parallelisierbar könnte man diese Methoden dann sogar in einen Thread auslagern,
    und weitermatchen,

    kennt man die Gegebenheiten kann man zwischen
    Regex und "1:1"-Matching wählen

    Ein Matching was einer minimalen Bedingung genügt, also er würde eher einen String unbekannter grösse parsen und parsen erfordert nicht ein immer wiederkehrendes FullMatching und durchlaufen eines Strings zum zigtausendsten mal, -> deshalb
    wäre runterbrechen durch Vorauswahl sinnvoll

    ---
    daher macht es wenig Sinn Strings 1:1 zur Laufzeit zu matchen (ausnahme Bashskripte! wo die Eingabevielfalt u. Verhaltensvielfalt annähernd bekannt sind),
    ---

    natürlich wäre es für EingabeParameterParsing
    eine praktische Angelgenheit, solange
    die Auswahl nicht _zu_ Vielfältig wird,
    und man vorher die Eingabeparameter auf eine
    bestimmte Grösse geprüft hat, so das da nicht
    gewaltige Datenmengen verarbeitet werden müssen,


    Re: Wenn das stimmt... (Score:2)
    Von kuckuck am Wednesday 16. June 2004, 22:04 MEW (#31)
    (User #818 Info) http://www.commandline.ch
    Du hast ein Interface, das implementierst Du und anschliessend übergibst du die instanz der Klasse dem Objekt, welches den Event auslöst. Ich wüsste nicht was besser gelöst ist...
    /* Nur wer schneller ist als der Strom hat die Kontrolle! */
    Re: Wenn das stimmt... (Score:1)
    Von boomi (symlinkleser@number.ch) am Thursday 17. June 2004, 00:00 MEW (#35)
    (User #1126 Info) http://www.number.ch
    Ich erinnere mich an "typed procedures" (oder so aehnlich) in Delphi Pascal. Um einem Button zu sagen, was bei einem Klick passieren soll, brauchte man dem Button nur eine Referenz zu einem Procedure zu geben.

    Nach allem was ich bis jetzt von Java gesehen hab, muss ich fuer jedes Event eine eigene Klasse basteln oder innerhalb der Methode unterscheiden woher das Event kommt => nicht sauber.

    In Java brauche ich eine extra Klasse (und Instanz!) nur fuer einen Listener. In einem Beispiel, dass ich gefunden habe, implementierte einer eine Klasse mit einer actionPerformed Methode. Alle seine Buttons haben dann diese Klasse als ActionListener angegeben. Dann hat er innerhalb der actionPerformed Methode den Text des sendenden Buttons ausgelesen und damit in einer langen Reihe if-else Statements die passende Aktion rausgesucht.

    Leider finde ich das Beispiel grad nicht mehr, aber hier was aehnliches, und da soll mir niemand sagen das sei sauber!
    http://www.developer.com/java/other/print.php/874351

    public void actionPerformed(ActionEvent e)
            {
                //check to see if the action command is equal to exit
                if(e.getActionCommand().equalsIgnoreCase("exit"))
                {
                    System.exit(0);
                }
                else if(e.getActionCommand().equalsIgnoreCase("Rectangle"))
                {
                    Menu menu = getMenuBar().getMenu(1);
                    for(int i = 0;i menu.getItemCount();menu.getItem(i).setEnabled(true),i++);
                    getMenuBar().getShortcutMenuItem(new MenuShortcut(kControlR)).setEnabled(false);
                    panel.drawShape(rectangle);

                }
                else if(e.getActionCommand().equalsIgnoreCase("Circle"))
                {
                    Menu menu = getMenuBar().getMenu(1);
                    for(int i = 0;i menu.getItemCount();menu.getItem(i).setEnabled(true),i++);
                    getMenuBar().getShortcutMenuItem(new MenuShortcut(kControlC)).setEnabled(false);
                    panel.drawShape(oval);
                  }
          [...viiiiel mehr davon...]
    Erklärung (Score:1)
    Von gabisoft am Wednesday 16. June 2004, 07:44 MEW (#2)
    (User #881 Info) http://gabisoft.ch.vu/
    C kann auch schneller sein als Assembler, wenn der Assemblercode nicht optimiert ist. Java kann nicht schneller sein als C, wenn Java in C programmiert ist. Da aber da Höhere Sprachen meisst direkt optimalere Algorithmen benutzen, kann es durchaus sein das Intepretierte Sprachen schneller sind.

    Will heissen: Wenn man wenig Zeit in die Entwicklung stecken will, nimmt man eine Scriptsprache. Möchte man wirklich ein optimales Ergebnis, muss man die Algorithmen direkt auf dieses Programm abstimmen. Ob Assembler, Hochsprache oder Scriptsprache, man muss immer entscheiden, wie viel Zeit man in die Entwicklung stecken will.
    Re: Erklärung (Score:2)
    Von brummfondel am Wednesday 16. June 2004, 09:45 MEW (#12)
    (User #784 Info)
    C++! Und C++ ist wirklich grausig, wenn man sieht, was der Compiler da alles einbaut. Dann wundert es auch nicht. Auch wenn mein erster Gedanke war, Java ist doch in C geschrieben. Klar, aber eben nicht in C++.

    --
    ok> boot net - install
    Re: Erklärung (Score:0)
    Von Anonymer Feigling am Wednesday 16. June 2004, 14:11 MEW (#24)
    Suns HotSpot (wurde aber in C++ geschriebe.
    Hab ich jetzt nicht wirlich begriffen. (Score:1)
    Von ia97lies am Wednesday 16. June 2004, 08:20 MEW (#3)
    (User #890 Info)
    Ich nehme mal stark an die Java VM ist in C oder C++ oder sonst einer Hochsprache geschrieben? Java Byte Code läuft nun auf dieser Java VM. Wie kann nun ein Java Programm schneller sein als ein C/C++ Programm. Für mich ist eine Interpretierte Sprache immer langsammer als eine Sprache die direkt auf der Maschine aufsetzt.

    Kennt sich da wer besser aus, warum das jetzt schneller ist?? Kann da jemand mal das Licht anzünden ;-)

    Grüsse, ia97lies

    Glaube einem Benchmark nur wenn du in selbst gefälscht hast ;-)) oder wie?
    Re: Hab ich jetzt nicht wirlich begriffen. (Score:2)
    Von db (001@nurfuerspam.de) am Wednesday 16. June 2004, 08:44 MEW (#5)
    (User #1177 Info) http://www.bergernet.ch
    Heute kompiliert doch die JVM mit Justin Timecompile das Zeug schnell vor dem ausführen und dann - roar.
    Re: Hab ich jetzt nicht wirlich begriffen. (Score:3, Lustig)
    Von Bros am Wednesday 16. June 2004, 08:52 MEW (#8)
    (User #812 Info) http://www.mario-konrad.ch
    Heute kompiliert doch die JVM mit Justin Timecompile das Zeug schnell vor dem ausführen und dann - roar.

    Für einen Moment hatte ich "Justin Timberlake" gelesen... *schudder* ;-)


    Re: Hab ich jetzt nicht wirlich begriffen. (Score:1)
    Von boomi (symlinkleser@number.ch) am Wednesday 16. June 2004, 08:52 MEW (#7)
    (User #1126 Info) http://www.number.ch
    Wenn eine Sprache bessere Abstraktionen hat, kann sich der Entwickler besser ausdruecken. Eine hoehere Abstraktion bedeutet nicht zwingend, dass die Programme langsamer laufen. Wie schnell ein Programm laeuft, ist vor allem eine Frage des Aufwands den du in die Entwicklung/Optimierung steckst. Der Aufwand ist umso groesser, je primitiver die Sprache ist.

    In C musst du jedesmal Speicher reservieren und wieder freigeben. In Java uebernimmt das die Virtual Machine, wenn der Speichermanager der VM noch unbenutzten Speicher hat, kann er den sofort zuteilen. In C muesstest du diese Funktion selbst implementieren, wer macht das schon?
    Re: Hab ich jetzt nicht wirlich begriffen. (Score:1)
    Von ia97lies am Wednesday 16. June 2004, 09:19 MEW (#10)
    (User #890 Info)
    Ok das mit der Abstraktion und so ist mir geläufig. Nur Java ist doch Byte Code der von der JVM ausgeführt wird? also nicht direkt Maschinen Code. Kanns irgendwie nicht so glauben, dass das schneller sein soll....
    Re: Hab ich jetzt nicht wirlich begriffen. (Score:0)
    Von Anonymer Feigling am Wednesday 16. June 2004, 22:47 MEW (#33)
    Ein grosser Teil des Codes für die Standard Library dürfte wohl plattformspezisisch optimierter Code sein, z.B. IO-Operationen, die häufig verwendeten Datenstrukturen und Algorithmen (Heap, Hashtable, binäre Suche, Langzahlarithmetik, viele mathematische Operationen aller Art, Speicherverwaltung usw.). Dann erzeugt die JVM nur noch ein bisschen Gluecode, um die plattformspezifisch optimierten Libraries aufzurufen. Die laufen dann mindestens so schnell wie der C++ Code. Ausserdem kann die JVM zur Laufzeit optimieren, während der C++ Compiler immer konservative Annahmen zur Compilezeit treffen muss.
    Re: Hab ich jetzt nicht wirlich begriffen. (Score:0)
    Von Anonymer Feigling am Wednesday 16. June 2004, 13:28 MEW (#21)
    Kennt sich da wer besser aus, warum das jetzt schneller ist?? Kann da jemand mal das Licht anzünden ;-)

    eine JVM kann zur Laufzeit Optimierungen vornehmen, was bei bereits fix kompilierten Programmen nicht möglich ist. Die Hotspot-Engine merkt, welche Funktionen besonders oft verwendet werden und kompiliert diese besser optimiert. Es gibt viele Optimierungen, die man erst zur Laufzeit vornehmen kann. Beispielsweise wenn eine Schlaufe je nach Benutzereingaben einmal sehr häufig oder dann wieder gar nicht durchlaufen wird.
    Kommt immer darauf an (Score:1)
    Von Bros am Wednesday 16. June 2004, 08:50 MEW (#6)
    (User #812 Info) http://www.mario-konrad.ch

    Wie andere schon bemerkt haben können Laufzeitoptimierungen schon was bringen. Interessant finde ich allerdings die Tatsache, dass immer nur die "Geschwindigkeit" gemessen wird, praktisch nie die Performance. Darin sind Geschwindigkeit wie auch Speicherbedarf enthalten. Bitte jetzt nicht die RAM_kostet_nichts_Jünger... Wenn man auch die Laufzeitgrösse (bei Java die VM einbezogen) betrachtet, tja dann siehts bitter aus für Java im Gegensatz zu C oder C++.


    Re: Kommt immer darauf an (Score:1)
    Von tbf am Wednesday 16. June 2004, 09:15 MEW (#9)
    (User #21 Info) http://taschenorakel.de/
    Zumal bei dem Benchmark wohl wirklich nur die arithmetische Performance von Java getestet wurde. Das was bei Java wirklich Zeit saugt: Objekte anlegen und wegräumen, wurde bewusst weggelassen. Tja und der Speicherbedarf von Java ist wirklich immens: Schon bei mittleren Web-Apps brauchts mehre GByte, damit die Kiste ned anfängt, wie wild zu swappen. :-/
    --
    Addicted by code poetry...
    Re: Kommt immer darauf an (Score:2, Informativ)
    Von tbf am Wednesday 16. June 2004, 09:21 MEW (#11)
    (User #21 Info) http://taschenorakel.de/
    Stop: Er hat 'nen Test, der Objekte instanziert:
    objinst.cpp und objinst.java. Die Ergebnisse dieses Tests werfen mich aber wirklich aus der Bahn, wiedersprechen nämlich meinen Erfahrungen! Bin ich zu doof die JVM zu starten?

    --
    Addicted by code poetry...
    Re: Kommt immer darauf an (Score:2, Informativ)
    Von Bros am Wednesday 16. June 2004, 10:41 MEW (#15)
    (User #812 Info) http://www.mario-konrad.ch

    Der Object-Creation Test ist IMHO ein Witz. Da Java einen Garbage-Collector hat, kann mit diesem Code gar nicht direkt verglichen werden. Warum:

    Java:

    for (int i=0; i<n; i++) {
      Toggle toggle = new Toggle(true);
    }

    Objekte werden erzeugt.

    C++:

    for (int i=0; i<n; i++) {
      Toggle *toggle = new Toggle(true);
      delete toggle;
    }

    Objekte werden erzeugt und wieder zestört, hmm...

    Die C++-Variante gibt bei jedem Durchlauf den Speicher wieder frei, die Java-Variante hingegen spart sich die Mühe auf später. Um den Vergleich vergleichbar durchzuführen, müsste das delete toggle von der C++-Variante auch auf später verschoben werden...


    Re: Kommt immer darauf an (Score:1)
    Von tbf am Wednesday 16. June 2004, 12:08 MEW (#16)
    (User #21 Info) http://taschenorakel.de/
    Hab's "delete" rausgenommen. Macht keinen Unterschied. Was aber 'n Unterschied macht: Die C++-Objekte statt auf dem Stack (statt dem Heap) anlegen, sprich: "Toggle toggle(true)" statt "Toggle *toggle = new Toggle(true)": Dann ist der C++-Code zwanzigmal schneller, als der Java-Code. Kann es sein, dass der Heap-Manager des gcc, der glibc oder des Kernels total im Arsch ist?
    --
    Addicted by code poetry...
    Re: Kommt immer darauf an (Score:2)
    Von P2501 am Wednesday 16. June 2004, 12:34 MEW (#18)
    (User #31 Info) http://www.p2501.ch/

    "Toggle toggle(true)" instanziert genau ein Objekt. Auch wenn man es in eine Schleife steckt.

    Übrigens ist die Objektinstanzierung meines Wissens bei JAVA und C++ deutlich anders gelöst. Damit lassen sich auch die anderen Benchmarks gut erklären. I/O-Operationen sind in JAVA bekannt langsam, in C++ aber eben auch. In C hingegen sind sie enorm schnell (mal von "printf" abgesehen).


    --
    Linux ist eine Turboprop. HURD ist ein Düsenjetprototyp, der seinen Heimatflughafen nie verlassen hat.

    Re: Kommt immer darauf an (Score:0)
    Von Anonymer Feigling am Wednesday 16. June 2004, 22:38 MEW (#32)
    "Toggle toggle(true)" instanziert genau ein Objekt. Auch wenn man es in eine Schleife steckt.

    Was aber semantisch völlig identisch zum Java-Code ist, denn auf die in früheren Schleifendurchgängen erzeugten Objekte sind nicht mehr adressierbar und können jederzeit von der GC abgeräumt werden.

    Re: Kommt immer darauf an (Score:2)
    Von P2501 am Thursday 17. June 2004, 16:26 MEW (#36)
    (User #31 Info) http://www.p2501.ch/

    Das ist für den Benchmark doch völlig egal. Wichtig ist, wieviele Objekte instanziert werden. Nicht, ob sie adressierbar sind.


    --
    Linux ist eine Turboprop. HURD ist ein Düsenjetprototyp, der seinen Heimatflughafen nie verlassen hat.

    Re: Kommt immer darauf an (Score:1)
    Von Bros am Wednesday 16. June 2004, 13:47 MEW (#23)
    (User #812 Info) http://www.mario-konrad.ch

    Interessant, dass kein Unterschied festzustellen ist. Auf jeden Fall wird beim Erzeugen eines Objektes auf dem Heap das Betriebssystem bemüht, während bei der JVM ein Pooling passiert, mit entsprechenden Resultat. Bei einem ähnlichen Mechanismus in C++ wär's dann auch wieder anders... muss allerdings von Hand gestrickt werden. Hierzu ist dieses Buch zu empfehlen (Kapitel 4: Small-Object Allocation):

    Modern C++ Design
    Author: Andrei Alexandrescu
    ISBN: 0201704315

    Re: Kommt immer darauf an (Score:1)
    Von Aurelio am Wednesday 16. June 2004, 13:02 MEW (#19)
    (User #859 Info)
    In Java kann man darauf verzichten, Objekte zu löschen, da diese von selber gelöscht werden (so Gott bzw. die Garbage Collection Engine wollen, aber das kann man mit Switches selbst steuern).

    In C++ muss man jedoch Objekte löschen, wenn man sie nicht während der Restlaufzeit des Programms im Speicher belassen will, weil ja ein Garbage Collector fehlt.

    Wenn man das so anschaut, kann man durchaus nachvollziehen, dass die Tests so programmiert worden sind, und sie entsprechen wohl der Programmierpraxis.

    im c't... (Score:2, Informativ)
    Von vade am Wednesday 16. June 2004, 10:03 MEW (#14)
    (User #1577 Info)
    ... 21/03 gabs einen Effizienztest:

    C#, Java, C++ und Delphi im Effizienztest, Teil 2 Know-how,.NET-Corner,Benchmark, ListList, ListList_OOP, objektverarbeitende Programmierung, Compiler, Optimierung, Konstruktoren c't 21/03, Seite 222

    leider nicht gratis: c't archiv
    Dazu aber ein forum thread
    Und sie dreht sich doch ! (Score:2, Informativ)
    Von Anonymer Feigling am Wednesday 16. June 2004, 12:16 MEW (#17)
    JavaByteCode wird schon lange nicht mehr "nur"
    interpretiert, wie hier schon jemand
    richtig geschrieben hat, und jedem bekannt sein sollte, gibt es einen "Just in Timecompiler"(seit geraumer Zeit),

    d.h. er wandelt die JVM_ByteCode Sequenzen in nativen Maschinencode um, das wäre ja so nichts besonderes,

    aber anstelle davon, diesen Prozess sinnlos für
    gleiche Sequenzen zu wiederholen, werden
    die Sequenzen gecached, und diese Sequenzen
    sind auch nicht zwangsweise statisch,
    sondern werden zur Laufzeit wenn der Optimierer
    "merkt" da kann man was machen, auch optimiert,
    d.h. die Sequenzen die häufig benötigt werden,
    erfahren auch eine besondere Beobachtung durch
    den Optimierer, z.B. um Arraygrenzen auszuschliessen die niemals erreicht werden,

    und der JIT und der Optimierer haben
    schon einiges an Entwicklungszeit in sich,

    der Unterschied ist, im Gegensatz zu statischem
    Code, der nur "einmal(nein damit ist nicht singlepass gemeint!)" kompiliert und optimiert
    wird, und sich nicht weiter zur Laufzeit verändert, damit schon erklärbar,
    verbessern sich die Optimierungstrategien der JVM
    und des JIT, verbessert sich auch,

    und dass sich die JVM kontinuierlich verbessert,
    kann man auch aus den Benchmarks mit jdk
    1.4.2 und 1.5-beta rückschliessen,
    welche von den Quake2->Jake2 Portierern gemacht wurden
    ( http://www.bytonic.de/html/benchmarks_de.html )

    obwohl es hier wohl eher um die Optimierungen im
    Threadhandling der JVM geht, und die Kommunikationsgeschwindigkeit mit nativen
    Bibliotheken(hier OpenGL) dadurch verbessert wird.


    Re: Und sie dreht sich doch ! (Score:1, Informativ)
    Von Anonymer Feigling am Wednesday 16. June 2004, 14:26 MEW (#25)
    damit mich keiner falsch versteht,

    ich habe hier nicht gesagt, dass JAVA unbedingt schneller ist, sondern nur das die Möglichkeit besteht dass es gleichschnell oder auch schneller ist, und sich der Geschwindigkeitsaspekt zum Teil auch von den Fähigkeiten des Programmieres seinen
    Code per Hand zu optimieren abkoppelt.

    Linux User Group Schweiz
    Durchsuche symlink.ch:  

    Never be led astray onto the path of virtue.
    trash.net

    Anfang | Story einsenden | ältere Features | alte Umfragen | FAQ | Autoren | Einstellungen