[QUOTE=HBerger]Also ich weiss nicht ob ich eine andere Wahrnehmung habe …
Aber „guten“ sprich optimierten C/C++ Programmen fühlt man es an … Der unterschied wird geringer, aber trotzdem …
nimm mal eclipse und nen VS … klar schwer zu vergleichen, aber so kleinigkeiten wie menues öffnen, nen file auswahl dialog anzeigen … geht alles flotter.
Was natürlich nicht heissen muss, das VS generell schneller ist ^^ das kann man eh kaum vergleichen. Aber trotzdem fühlen sich java anwendungen generell „zäher“ an, find ich.
und eclipse ist noch nen positver fall von optimierten java …
[/QUOTE]
Ich arbeitete mal mit VS, und es fühlt sich wesentlich langsamer an als Eclipse. Auch wenn ich z.B. Firefox mit Eclipse vergleiche, die Dialoge und Menus öffnen sich bestimmt nicht schneller in Firefox.
Ich denke das ist eher psychologisch bedingt. In deinem Kopf denkt du immer: Java und Swing sind viel langsamer, native C++ Anwendungen sind schneller. Ich habe noch nie einen Unterschied in solchen minimalen Sachen wie Dialoge und Menüs gemerkt. Auch der Editor in Eclipse is genauso schnell wie in z.B. Kile (KDE/Qt Texteditor). Ich habe auch Graphen mit JFreeChart und andere Chart-Bibliotheken anzeigen lassen und die sind auch sehr flott.
Also Programmierer müsstest du wissen, dass a) Java Swing ist Hardware-Beschleunigt wie auch andere C++ Toolkits; b) 99,9999% der Zeit verbringt eine GUI Anwendung mit warten, warten auf User-Eingabe.
Du Vergleichst Äpfel mit Birnen. Wieso hast du nicht xerces-j benutzt?
Hier ist ein Benchmark einer Menge XML parser:
http://xmlbench.sourceforge.net/results/benchmark/
xerces-j und xerces-c sind fast gleich schnell.
[QUOTE=HBerger;70495]
Das Programm was die erzeugt ist uebrigens nen Java programm- frontend zu ner DB. der export dieser datei dauert im 20 min bereich.
früher hatten wir nur nen java parser … mussten den in nen c++ modul packen mittels jni um das laufen zu koennen …
das hat auch zig minuten gebraucht.
Ob solche mengen mit DOM zu parsen sinnvoll ist, ist ne andere frage, aber nur der „laufzeitunterschied“ ist schon gravierend
Ich mach hier Messdaten auswertung. Ich krieg datenstroeme von bis zu 20Mbit und muss die „online“ auswerten.
Dazu muss ich packete in signale zerlegen nach ner Vorschrift aus ner DB klar … und die Werte „validieren“.
bei bis zu 800k Packete/s …
Selbst ohne die Hw anbindung zu betrachten, die datenmengen kriegst in java nie hin … da fehlt einfach der direkte speicherzugriff. ich kann mir selbst unter c++ nicht erlauben, alles als object zu bauen.
Aber als HW Nahe programmierung wuerd ich das dann auch noch nicht bezeichnen …
Ciao …[/QUOTE]
Sicher dass du die Datenmenge nicht hinkriegst? Hast du es den versucht?
Java hat auch direkten Speicherzugriff: NIO.
Für Socket gibt es z.B.
Raining Sockets - High Performance IO in Java http://jniosocket.sourceforge.net/
High Performance Java Fast Sockets http://torusware.com/nevonproducts/jfs/
*** Edit ***
[QUOTE=HBerger;70557]Intressant …
Wir haben ein „Project“ das „scheitert“ grad an der performance.
Das heisst unsere SW liefert Signal-Werte interpretiert (double) oder ints und nen Zeitstempel(8 byte) so 8-12k pro sec.
die bekommen das per JNI injiziert (die laufen in einer von unserem Prozess aufgezogenen JVM)
die versuchen die werte zu nehmen, simple vergleiche zu machen <>== gegen Werte aus ner DB und schreiben die ergebnisse in ne konsole und log.
Die Fehler die sie finden sind gering, also IO ist ueberhaupt nicht das Problem …
nur kommen sie trotzdem mit der Input-Datenmenge nicht klar …
laut deren aussage kann java keine 8k/s Instanzen pro Sek instanziieren, und damit scheitert die sache schon an der Übergabe per JNI …
Vielleicht ist es auch JNI selber, keine Ahnung …
Ciao …[/QUOTE]
Schon mal versucht einen Profiler einzusetzen?
Auch andere Strategien einzusetzen, 1000de von Instanzen zu erzeugen ist nicht wirklich das optimale.
*** Edit ***
[QUOTE=CCMike;70561]Rein am instanzieren wirds wohl nicht liegen:
Damit schaff ich 300 millionen instanzierungen im ersten durchlauf und 390 wenn die vm warmgelaufen ist.
Aber ja, sobald man beginnt was zu berechnen/überprüfen geht die zahl schnell runter.[/QUOTE]
Du musst auch bedenken, dass die Instanzen wieder von dem GC aufgeräumt werden müssen.
Besser ist das Flyweight Pattern.