Zitat von
r_kerber:
Hinzu kommt, das nicht alle VM's auf allen Systemen gleich gut laufen. Denn diese muß für jedes Betriebssystem und für jede Hardware neu geschrieben werden. Und wer garantiert mir, das z.B. HP für HP/UX eine perfomante VM bereitstellt, die auch noch fehlerfrei läuft.
Sehr schönes Argument, aber zeig mir ein Programm dass auf allen Plattformen läuft, viel Spaß. Natürlich stimmt "write once, run everywhere" nicht wirklich, es geht nur um typische Systeme. Und natürlich kann dir keiner garantieren, dass ein JDK fehlerfrei ist, aber garantierst du jmd. die Fehlerfreiheit deiner Programme? (falls ja, mutig!)
Klar, man kann seine Programme verifizieren und zeigen, was eine Methode genau macht. Aber wenn ich in der Verifikation oder viel schlimmer in der Spezifikation einen Fehler mache ist das natürlich auch wertlos.
Wenn du nun für n Systeme dein Programm zur Verfügung stellen möchtest, dann hast du das Problem, dass jeder Compiler (für egal welche Sprache) für dieses System existieren muss (oder du musst ihn selber schreiben). Beide Fälle können nicht ausschließen dass dabei Fehler passieren. Genau so wenig kann dir jmd. garantieren, dass dein Compiler optimierten Code erzeugt (gerade hier liegen etliche Fehlerquellen). Also warum sollte Sun das für Java können?
Gut, natürlich brauche ich bei Java noch ein JRE um das Programm zu starten, ich verdoppel also quasi die Fehlermöglichkeiten.
Soweit so gut, nehmen wir mal an du hättest für n Plattformen funktionierende (o.B.d.A) C-Compiler die dir perfomanten Code erzeugen. Dummerweise haben die aber die Angewohnheit, Plattform spezifischen Code zu verlangen und du schreibst dass Programm n mal. Ja, die Wahrscheinlichkeit dass 1 der n Programme einen Fehler hat ist schon mal sehr groß. Wenn du jetzt mehr als ein Programm hast...
Wenn es einen Fehler in einem JRE gibt, so wird er (durch die große Anzahl der Benutzer) sicherlich schnell entdeckt und hoffentlich auch behoben. Selbes gilt für javac.
Natürlich bräuchtest du erst ein JRE für jede Plattform auf dem es laufen muss, aber wenn du eh für eine Plattform entwickelst, für die es ein solches gibt, hast du gratis eine Version für jede andere.
Zudem musst du deinen Code nur einmal verifizieren und müsstest ihn nur an einer Stelle korrigieren, also ist die Idee von Plattformunabhägigkeit nicht so schlecht. Es bleibt aber eine Idee, es wird wahrscheinlich nie eine 100%tige Deckung für alle Plattformen geben (wozu auch).
Was aber eigentlich wichtiger ist, niemand möchte eine Software unbedingt unter wirklich allen Plattformen anbieten. Das ist eine einfache Kosten/Nutzen Abschätzung und wenn du höchste Performance auf allen Plattformen garantieren möchtest, dann denke ich landest du schnell bei handoptimiertem Assembler (es lebe die PS One).
Überhaupt ist wird Java ja gerne mit dem Wort Performance in Verbindung gebracht. Lustigerweise meinen Leute, dass es der große Nachteil von Java sei, dass es so langsam arbeitet.
Wie langsam Java wirklich ist (oder eben nicht), dazu findet man genug. Was aber mal erwähnt werden sollte ist, dass es gar keinen Grund gibt Java aus Performancegründen einzusetzen.
Ich glaube der eigentliche Grund für den Trend zu Java war es damals gewesen, dass diese Sprache eine extreme Codesicherheit bietet. So bietet Java sehr hohe Typsicherheit. Insbesondere gibt es keine Zeiger, die ich einfach mal auf den falschen Speicherbereich setzen kann. Ich kann auch nicht über die Länge eines Arrays hinaus lesen, schließlich ist es von fester Länge usw.
Unter dem Aspekt betrachtet ist Java für Firmen sehr interessant und bei heutigen Rechnern (die in sehr wenigen Programmen wirklich 100% Last für mehr als ein paar Sek. haben) sind Java Programme damit für verschiedene Probleme geeigneter als anderes. Natürlich wird es wenig Videobearbeitungssoftware für Java geben, aber auch dass kann sich noch ändern.
Viele Prozessoren haben schon heute Coprozessoren die direkt Java Befehle abarbeiten (und nebenbei bemerkt, .net verfolgt keinen anderen Ansatz. Zudem hat C# mehr Ähnlichkeit mit Java als mit C/C++).
Es gibt einfach verschiedene Bereiche in der Softwareentwicklung mit ganz verschiedenen Anforderungen. Man braucht sich nur mal J2EE und die Firmen die darauf setzen anschauen (nicht wenige, nicht nur kleine..)
Und auch in dem Bereich gibt es Perfomantere Lösungen, aber Geschäftsprozesse in Banken wollen lieber Sicherheit anstatt Performance (die auch nicht zu kurz kommt) sowie Skalierbarkeit.
Als letztes möchte ich noch Anmerken, dass Microsoft bereits verkündet hat, dass sich auch an ihren Betriebssystemen eine Menge ändern wird. So arbeitet man heute noch mit Sprachen und Konstrukten, die super auf Rechenzeit und Speicherverbrauch optimiert sind (als beides noch knapp war), aber die heutigen Rechnerarchitekturen haben soviel mehr Performance als genutzt wird. Man möchte jetzt auf eine (auf C# basierende) Sprache wechseln, die einfach mehr Sicherheit. Damit sind dann Speicherüberläufe durch zu geringe Prüfung gemeint (u.a.) und dabei ist Microsoft gerne bereit etwas weniger perfomant daher zu kommen.
Gruß Der Unwissende
PS.: Sorry ist eigentlich alles total
OT, aber die eigentlich Frage wurde ja schon erörtert