Daniel Thoma: Engagement der ASF bzgl. Java - Verh. Perl u. PHP

Beitrag lesen

Hallo Cruz,

Erm, Java wird grundsätzlich erstmal in Bytecode übersetzt und ist somit bereits vor der Laufzeit fertig für die VM kompiliert.

richtig.

Was Java "just in time" macht ist es Klassen zu laden, was das ganze eher langsamer macht, als schneller, aber wohl etwas Speichereffizienter ist, falls eine Klasse doch mal nicht gebraucht wird.

Richtig ist, dass Klassen geladen werden, wenn sie gebraucht werden. Wenn man will, kann man sofortiges Laden natürlich erzwingen. Schneller dürfte das aber kaum etwas machen, es ist ja im Grund ziemlich egal, wann man die benötigte Zeit aufbringt und in einem parallelen Programm könnte es effektiv sogar schneller werden, weil man ja noch andere Dinge nebenher tun kann, während man für irgend etwas anderes Klassen läd.
Falsch ist allerdings, dass Java sonst nichts "just in time" machen würde. Der Java-Bytecode wird nicht bzw nur teilweise interpretiert, sondern zur Laufzeit in Maschinencode übersetzt.

Um ein Gefühl dafür zu entwickeln, habe ich mal ausprobiert, wie viel Speicher ich in Java und in C in 10 Millisekunden kopieren kann.

In Java gibt es keinen direkten Speicherzugriff, wie hast Du das also getestet? Möchtest Du nicht Deinen Code hier posten?

Java ist schnecken langsam im Vergleich zu C.

Java ist nicht langsam, aber sicher langsamer als C (oder wohl auch C++), wenn man in diesen Sprachen den entsprechenden Aufwand investiert, um schneller zu sein. Bei größeren Programmen ist das nicht mehr so einfach und auch der (organisatorische) Aufwand, der für das Speichermanagement betrieben werden muss, steigt deutlich. Da ist C/C++ dann nicht mehr so einfach schneller. Java ist ziemlich gut darin, gerade stark objektorientierte Programme effizient auszuführen.

Aber gerade wegen der unglaublichen Lahmarschigkeit hat sich Java nie als eine Sprache für Anwendungen durchgesetzt

An der Theorie habe ich starke zweifel. Das dürfte eher mit der Verbreitung auf Deskopsystemen und den damit entstehenden Deploymentschwierigkeiten bei Desktopanwendungen zusammenhängen. Anwendungen mit irgend welchem MS-VB-Kram zu schreiben, war da für viele Firmen einfacher. Vor allem, da Plattformabhängigkeit oft kein Argument ist bzw. höchstens allmählich wird.

oder habt ihr schon mal eine befriedigend schnelle Swing Oberfläche gesehen?

Ja.

Ich behaupte sogar, dass Perl und PHP schneller laufen, als Java. Es sind interpretierte Sprachen, d.h. sie werden bei jeder Ausführung erstmal übersetzt, aber dann laufen sie in Form von Maschinencode ab

Falsch, da eiert ein Interpreter auf einem Syntaxbaum oder einem Zwischencode rum und das war's. Perl hat einen Refcounting-Garbage-Collector. Das ist weit hinter dem, was Java auf dem Gebiet bieten kann. Bei PHP weiß ich es nicht genau, toll wird der GC da auch nicht sein.

Ich finde was der Welt noch fehlt ist eine Programmiersprache, die so schön ist wie Java, aber direkt in Maschinencode kompiliert wird, damit es trotzdem schnell läuft.

Viele der dynamischen Eigenschaften von Java lassen sich damit nicht erreichen, am Speicherverbrauch (wie dramatisch man den nun im Vergleich zu C++ auch einschätzt) würde das ebenfalls nichts ändern. Außerdem würden typische Javaprogramme dabei wahrscheinlich auch noch langsamer (jedenfalls welche, die nicht nur recht kurz laufen), weil manche entscheidende Optimierung statisch gar nicht funktioniert.
Um diese Art der Programmierung für noch mehr Anwendungsbereiche geeignet zu machen (Echtzeitsysteme sind da z.B. noch wenig erschlossen), muss man schon JIT-Compiler und GCs weiter verbessern.

Grüße

Daniel