java speed?
-
Also ich halte es für ziemlich paradox nen Native-Compiler für Java einzusetzen. Da muß ich mich bei diesem Gedanken wirklich schütteln. Wenn ich Java und C++ kann, dann code ich nicht in Java um es dann doch wie C++ zu compilieren, das ist irgendwie hirnverbrannt.
Wenn ich Performance und andere Gründe habe zu compilieren, dann nehmen ich C/C++. Und Java code ich aus anderen Gründen, wie z.B. Plattform-unabhängigkeit. Aber selbst Java wird heute in Satellieten und Handies eingesetzt. Schliesslich gibt es ja auch die J2ME (Java 2 Micro Edition) die eine eigene VM, eigene MiniLibs und nen anderen Byte-Code hat.
Also wer hier zu einem Compiler rät, der hat sich keine Gedanken zu seinem Projekt gemacht.
[ Dieser Beitrag wurde am 08.04.2003 um 16:19 Uhr von Artchi editiert. ]
-
@Artchi
klingt irgendwie nicht so als ob du arg viel von Java hälst, wenn du meinst, daß wenn die Platformunabhängigkeit weg ist, man sowieso C++ verwenden sollteAußerdem ist die Unabhängigkeit auch mit Native-Compilern eigentlich noch ziemlich da, weil man muß dann zwar für jede Platform neu compilen, aber der Java-Code is immer derselbe..das is wohl wesentlich weniger Aufwand als wenn man eine Win-Oberfläche mit C++ und WinApi schreibt und diese dann was weiß ich auf Linux transportiren soll
-
Original erstellt von crass:
**
Außerdem ist die Unabhängigkeit auch mit Native-Compilern eigentlich noch ziemlich da, weil man muß dann zwar für jede Platform neu compilen, aber der Java-Code is immer derselbe..das is wohl wesentlich weniger Aufwand als wenn man eine Win-Oberfläche mit C++ und WinApi schreibt und diese dann was weiß ich auf Linux transportiren soll**Java-native-Compiler gibt es allerdings nur für wenige Plattformen. JVMs sind für deutlich mehr Plattformen verfügbar.
Java hat noch andere Vorteile gegenüber C++. Das stimmt schon:
- Speichermanagement
- Sicherheitskonzepte
- geringere Kompexität
- eine viel mächtigere Standardbibliothek
- ...
-
Wo wir bei Embedded Systems sind: Bei C++ Compilern ohne STL und Templates wird mir auch Speihübel. Das ist ja kastration.
-
Original erstellt von crass:
**@Artchi
klingt irgendwie nicht so als ob du arg viel von Java hälst, wenn du meinst, daß wenn die Platformunabhängigkeit weg ist, man sowieso C++ verwenden sollte
**Nein, da hast du mich falsch verstanden oder ich hab mich nicht korrekt ausgedrückt. Java als Sprache an sich ist i.O. Aber wie gesagt, wenn ich C++ kann und ich Performance etc. brauche, und auf einmal rät mir jemand "Na dann compiliere doch das ganze!"... Ehm, da kann dann irgendwas nicht stimmen.
**
Außerdem ist die Unabhängigkeit auch mit Native-Compilern eigentlich noch ziemlich da, weil man muß dann zwar für jede Platform neu compilen, aber der Java-Code is immer derselbe..das is wohl wesentlich weniger Aufwand als wenn man eine Win-Oberfläche mit C++ und WinApi schreibt und diese dann was weiß ich auf Linux transportiren soll**Ne, das sehe ich anders. Weil man kann auch in C++ mit einigen Libs unabhängig coden. Das beste Beispiel ist doch die STL, und gefolgt von OpenGL, Qt oder GTK usw. Theoretisch kann ich auch in C++ nur Libs nehmen die auf meinen Zielplattformen vorhanden sind und die ich ohne (großen) Aufwand für mehrere Zielplattformen compilen kann.
Java ist aber ein anderes Kaliber und auch als solches gedacht. Man codet einmal, und jeder Heinz soll dann das Programm auf seiner Plattform mit einem Doppelklick oder einer Kommandozeile zum laufen bekommen. Das ist doch das Hauptanliegen von SUN gewesen und das ist sogar super. Dabei ist es egal ob es ein Applet im Browser oder eine Applikation auf dem Desktop ist. Wenn ich Java nutze, will ich doch genau DAS!
Natürlich kann jeder so lustig native compilieren wie er will. Ich würde aber eher sagen, das die Leute die compilieren WOLLEN, doch eigentlich von der Performance ihrer Java-Software NICHT überzeugt sind. Denn wenn sie überzeugt bzw. zumindest zufrieden wären, bräuchten sie es ja nicht zu compilen. Oder?
Noch was aus dem Leben:
Wir haben hier sehr viele Java-Projekte. Das aktuelle Projekt sogar mehrere tausend Klassen umfasst und riesige Datenmengen und Grafik-Simulationen (2D-Vector-Grafik) für eine Autoproduktion verarbeitet. Es ist zwar nicht so performant wie eine C++-Anwendung, aber wir empfehlen dann den Konzern-Anwendern einfach P3 oder P4 PCs. Ich selber hätte das ganze lieber in C++ programmiert, weil einfach alles schneller laufen würde, aber die Philosophie hier im Konzern besteht darin zukünftig alles per Webstarter zu starten, von jedem Rechner aus der eine Java2 Runtime hat.Wenn es um Performance gehen würde, würden wohl die wenigsten sagen: wir machen alles in Java und compilen das. Das würden nur die sagen, die kein C++ können oder es nicht mögen (es gibt hier nen Kollegen der C++ als "Schwul" bezeichnet, hihi). Ich als jemand der beides beherrscht, würde abwiegen. Und da würde manche Entscheidung auf C++ fallen und wegen anderer Gründe sicherlich auch auf Java. Aber im Nachhinen Java compilieren, weil man feststellt "Ups, die Performance passt mir ja garnicht. Hab ich vergessen dran zu denken, als ich das Projekt anfing." Hihi, das ist einfach eine dumme Entscheidung gewesen, wenn man das ganze auch in C++ hätte machen können.
[ Dieser Beitrag wurde am 09.04.2003 um 09:54 Uhr von Artchi editiert. ]
-
Original erstellt von Gregor:
**
Java hat noch andere Vorteile gegenüber C++. Das stimmt schon:- Speichermanagement
- Sicherheitskonzepte
- geringere Kompexität
- eine viel mächtigere Standardbibliothek
*** ...
Ob man das Speichermanagement und die geringere Komplexität unbedingt als Vorteil sehen muß, finde ich jetzt jetzt fraglich.
Schließlich sind das ja Dinge, die C++ so gut/schnell machen. Wenn ich die performance brauche, erlaubt mit c oder C++ ein wesentlich besseres Speichermanagment System, auf das man durchaus angewiesen sein kann!
Und die geringere Komplexität wird doch letzlich nur bei Anfängern als Bonus gewertet.
-
Du unterschätzt das Speichermanagement von Java. Das ist sehr effizient. Du kannst ja mal das Java-new und den GC gegen das C++-new+delete benchmarken. Du wirst überrascht sein. (Du kannst dir auch einfach mal folgende Seite in einem Thread hier durchlesen: Wie heißt der Nachfolger ... )
IMHO beugt eine geringere Komplexität Bugs vor und gewährt eine bessere Wartbarkeit. ...aber da gibt es wohl auch ne Menge anderer Meinungen.
-
Ich muß noch ein paar Dinge anmerken.
Zum leidige Thema Java-Speed: Es gibt Dinge die man ganz einfach bedenkenlos in Java machen kann. Nehmen wir eine Online-Banking Software. Diese nimmt doch einfach nur Eingaben vom User entgegen, verschlüsselt sie und sendet sie an den Banken-Server. Und Daten die ankommen werden angezeigt, evtl. sind da noch ein paar Funktionen bei, die dem User das Leben einfacher machen sollen. Das ist jetzt mal von mir grob veranschaulicht.
Es gibt noch tausend andere Anwendungen die so ähnlich ablaufen, die halt nicht wirklich Performance schlucken, sondern reine Ausgabe und Eingabe haben mit kleinen Suchfunktionen o.ä. Solche Dinge kann man bedenkenlos in Java programmieren, da braucht man nicht compilieren.
Manchmal wird bei solchen Diskussionen ganz einfach vergessen, das es nur Spezialfälle gibt, wo man mit Java an Grenzen stösst.
Zu den "Vorteilen" von Java: Der große Vorteil ist doch das man nicht für jede Plattform compilen muß. Und für Anfänger ist noch der Vorteil, das man sich nicht mit Pointern, Referenzen, vergessenen Deletes, Templates, Headerdateien usw. rumschlagen muß. Man kommt schneller zu Ergebnissen.
Aber heißt das das Java besser ist? Nein, es hat nur eine andere Philosophie! Dafür hab ich aber mit C++ ein viel mächtigeres Werkzeug (nein, ich hab nicht gesagt besser!). Und mächtig bedeutet nunmal auch immer "komplexer" und somit auch mehr Lernaufwand. Aber dafür bekommt man ein Werkzeug das perfomanter ist und mit dem ich auch Treiber u.ä. programmieren kann. Alles hat seine Vor- und Nachteile. Und es bringt auch nichts hier zu diskutieren was besser ist. Dem Fragesteller ging es um Speed, und da muß man einfach sagen: Wiege danach ab was du entwickeln willst und was das Ziel ist.
[ Dieser Beitrag wurde am 09.04.2003 um 10:39 Uhr von Artchi editiert. ]
[ Dieser Beitrag wurde am 09.04.2003 um 10:42 Uhr von Artchi editiert. ]
-
Hier ist ein Link zu einer Leseprobe aus einem SUSE-Buch über Java.
Da steht so einiges, was Java-Geschwindigkeit betrifft.
[url] http://www.suse.de/de/private/products/books/3_935922_53_1/index.html [/url]
-
Original erstellt von <Waid>:
**Hier ist ein Link zu einer Leseprobe aus einem SUSE-Buch über Java.
Da steht so einiges, was Java-Geschwindigkeit betrifft.
**Was steht da? Ich habe da nur einen Vergleich zwischen ein paar JVMs gefunden.
-
Und die geringere Komplexität wird doch letzlich nur bei Anfängern als Bonus gewertet.
sicher? Ich war früher auf dem Trip daß ein guter Programmierer möglichst viel in Assembler macht und je schwieriger die Entwicklung umso mehr kommt hinterher raus. Eine Sprache ohne Zeiger hätt ich gar nich erst angeschaut. Inzwischen bin ich ganz anderer Meinung. Eine moderne Sprache muß möglichst leicht zu handlen sein und selber schlau genug sein sehr schnellen und guten Code daruas zu machen. Manche Sachen wie Speichermanagment weiß doch ein intelligenter Compiler viel besser wie er mit umgehen muß..das sollte doch nicht die Aufgabe eines Programmieres sein. (Der hat doch ganz andere Sorgen) Genauso ob ich jetzt ein Zeiger auf ein Objekt, eine Referenz oder ein Objekt an sich hab..in C++ kann ich das alles selber definieren, aber warum sollte mich das als Programmierer kratzen? warum schaut nicht einfach der Compiler wie es am besten in Maschinen(oder Byte-)Code umzusetzen ist? Meiner Meinung nach ist das sehr wohl möglich das alles auf den Compiler abzuwälzen und wenn ich mit wenig Aufwand viel hinkrieg dann ist mir das doch wohl am liebsten.
@Artchi Du hast Recht, bei den meisten Programmen kommt es gar nicht so sehr auf die Geschwindigkeit an und bei denen isses mir auch egal obs jetzt interpretiert wird. Ich hab nur keine Lust dann für andere Sachen unbedingt gleich wieder ne andere Programmiersprache einzusetzen. Ich hass des mich dauernd umzustellen
[ Dieser Beitrag wurde am 12.04.2003 um 16:43 Uhr von crass editiert. ]
-
Original erstellt von Gregor:
**[quote]Original erstellt von jogix:
[qb]
Ich programmiere manchmal an einem kleinen Bildverarbeitungsprogramm in Java. Dort gibt es bereits eine Funktion zum Vergrößern von Bildern. Diese ist zumindest geringfügig schneller, als die von GIMP. Ich weiß allerdings nicht, in welcher Sprache das bei GIMP gemacht wurde und wie optimiert das bei GIMP ist. Zumindest ist das wohl in etwa die Geschwindigkeit, die man erreichen kann. Viel schneller geht es wohl nicht mehr.
**Die Algorithmen könnten unterschiedlich qualitative Ergebnisse aufweisen!
Du kannst ja kein fixed bitrate encodiertes MPEG2-Movie mit einem 4 fach gepassten vbr MPG2 Movie vergleichen.
-
Original erstellt von Lars:
Die Algorithmen könnten unterschiedlich qualitative Ergebnisse aufweisen!
Du kannst ja kein fixed bitrate encodiertes MPEG2-Movie mit einem 4 fach gepassten vbr MPG2 Movie vergleichen.Stimmt schon, ich habe zwar keinen Unterschied feststellen können, aber das scheint sowieso sehr schwierig in diesem Fall zu sein. Ich habe in meinem Programm auch andere Algorithmen (zur Interpolation) implementiert, damit sieht das Ergebnis auch nur geringfügig anders aus, allerdings sind die Zeiten sehr unterschiedlich.
Ich gehe momentan davon aus, dass GIMP beim Skalieren eine bi-lineare Interpolation verwendet, um den Farbwert eines Pixels auf dem skalierten Bild zu bestimmen. Wenn da jemand andere Informationen hat, dann würde mich das sehr interessieren.
[ Dieser Beitrag wurde am 13.04.2003 um 22:04 Uhr von Gregor editiert. ]