Hallo,
Viele Java-Anwendungen die ich hier habe sind von der Geschwindigkeit her praktisch nicht mehr von C/C++ zu unterscheiden.
Wenn Sie erst einmal gestartet sind. Ein Java-Programm, das mir die Kommandozeilen-Parameter ausspuckt, braucht merklich länger als ein entsprechendes C oder C++-Programm oder gar PHP-Script.
Da hast Du vollkommen recht. Die Startzeit ist wirklich nicht berauschend. Deshalb schrieb ich auch in einem anderen Posting, dass ich für kleinere Sachen andere Sprachen (z.B. Skriptsprachen) bevorzugen würde.
Übrigens läßt sich mit einem Trick die Java-VM einmalig starten und im Speicher behalten, so dass der Start der Javaprogramme dann flott geht.
Schade das eine solche Option nicht irgendwo angeboten wird. Liegt vielleicht daran, dass das nicht ganz unproblematisch ist. Es könnte zu Wechselwirkungen zwischen mehreren gleichzeitig gestarteten Java-Programmen kommen.
Bei Java muss halt am Anfang der ganze java.lang.*-Krempel etc. in den Speicher geladen werden, und das kostet Zeit.
Viel Zeit braucht vorallem die Java-VM selbst. Der java.lang. Krempel wie Du ihn nennst sind ja nur Klassen und dir werden erst dann geladen, wenn sie benötigt werden.
Daher ist Java serverseitig auch nur als Servlet o.ä. sinnvoll, als CGI ist und bleibt Java Selbstmord. ;-)
Stimmt: CGI ist nicht anzuraten. Aber wer benutzt heute noch ernsthaft CGI-Skripte im ursprünglichen Sinne?
Aber insofern Zustimmung: Für ein Desktop-Programm, das ständig zumindest im Hintergrund läuft (Terminkalender, Adressbuch), dürfte es keinen wirklichen Geschwindigkeitsunterschied zu C/C++ geben.
Es kommt sicherlich immer auf den Fall an. Aber so groß wie gemeinhin angenommen ist der Unterschied auf keinen Fall. Übrigens ist schon allein C++ gegenüber C sehr viel langsamer. Ein gewisser Overhead scheint alleine schon die Objektorientierung darzustellen.
Und die Objektorientierung von C++ ist ein Witz.
Ich habe schon *ewig* (d.h. 5 Jahre oder mehr) nichts mehr in C++ gemacht, aber ich fand die Sprache eigentlich OK. Was genau hast Du daran auszusetzen?
Vergleiche mal C++ mit Objective-C, dann weißt Du was ich meine.
Es gibt viele Dinge. Vorallem aber ist es der statische Charakter. Ganz im Gegensatz zu Objective-C (oder auch Java), wo es dynamic typing, dynmische Methodensuche / dynamic-runtime-binding (statt virtuelle Methoden wie in C++). Die Botschaften die Objective-C Objekte empfangen können müssen nicht zur Compilezeit feststehen. Es gibt ein sauberen Methoden-Selektor als Alternative zu Funktionszeigern.
Übertrieben gesagt: C++ ist im Prinzip ein C mit einer Sprungtabelle.
Wie statisch die ganze Sache ist sieht man auch daran, dass die ersten C++ Compiler aus C++ Code C-Code gemacht haben und das dann durch einen C-Compiler gejagt.
Dieses dynamic-runtime-binding erlaubt auch ein viel besseres Objekt-Design als C++. In vielen Fällen sind in C++ Hilfsklassen notwendig die nur dazu dienen bestimmte Konstrukte syntaktisch zu ermöglichen!
Aber es gibt noch weitere Vorteile dieses Verfahrens. So lassen sich zu Klassen von Klassenbiliotheken neue Funktionalitäten hinzufügen ohne die Bilitothek neu zu kompilieren.
MacOS nutzt das late-binding auch hervorragend aus. Bibliotheken und Programme können einfach ins Betriebssystem eingefügt werden, ohne dass eine großartige Installation notwendig ist oder das ganze Gehampel mit der Registry.
Komponenten braucht man nicht speziell zu deinstallieren sondern man löscht sie einfach.
Desweiteren ist die Syntax viel klarer als bei C++. Und das Speichermanagement intelligenter (ok, inzwischen gibt es sogar GarbageCollection für C++ ; passt aber nicht ganz ins Konzept). So läßt sich in Objective-C ein Objekt mit den angehängten Child-Objekten mit einem Schlag freigeben.
Zugegeben, in C++ gibt es auch einige Konstrukte die es in Objective-C nicht gibt. Aber das sind meistens Dinge, die in Objective-C ohnehin anders gehandhabt und daher nicht benötigt werden.
Unterm Strich ist für mich Objective-C das bessere Konzept.
Gruß
MichaelB