Java - Eine plattformunabhängige objektorientierte Programmiersprache

Die meisten Programmiersprachen wurden entwickelt um damit spezifische Aufgaben lösen zu können, die mit anderen Programmiersprachen nur schwer implementiert werden konnten. Die Wahl der Programmiersprache hängt daher traditionell von der zu lösenden Aufgabe ab. Nach wie vor sind numerische Probleme besonders leicht in FORTRAN zu implementieren. Geschwindigkeitskritische Bausteine eines Betriebssystems sind gut in C zu erledigen.

Für Anwendungen die in Webbrowsern laufen sollten, gab es lange nur die Wahl zwischen JavaScript und Java-Applets . Javascript ist im Laufe der Zeit immer mächtiger geworden, hat jedoch Nachteile nicht unterschätzt werden dürfen. Insbesondere weil JavaScript eine Interpreter Sprache ist (kleine Performancenachteile) und weil die Wartung von Javascriptcode problematisch ist. Hinzu kommt das Javascript gewisse Browserabhängigkeiten hat, was Scripte verkompliziert.

Java-Applets können mit geringem Aufwand so programmiert werden, dass sie auch als eigenständiges Programm ablaufen können. In dieser Form können sie in Entwicklungsumgebungen erstellt und getestet werden. All die mächtigen Werkzeuge zur Fehlersuche und Geschwindigkeitsoptimierung stehen zur Verfügung.

Ein Vorurteil, dass oft gegen Java verwendet wird, ist das Javaprogramme langsam sein sollen. Dies ist zwar nicht richtig, hat jedoch einen wahren Kern. Wird ein Javaprogramm gestartet, so muss zunächst die Virtuelle Maschine gestartet werden. Diese ist ein "großes" Programm, das einige Zeit zum Starten braucht, auch um die Laufzeitbibliotheken schon mal zu laden. Danach erst kann das eigentlich Programm ausgeführt werden. Winzige Programme, die genau einmal ausgeführt werden, erscheinen daher um ein Vielfaches langsamer zu sein, als z.B. ein Perl- oder PHP-Script obwohl diese erst interpretiert oder compiliert werden müssen. Inzwischen erobert Java auch die Server und macht Perl und PHP ihren Rang streitig.

Eine für alles?

Was spricht für Server Side Java? Zunächst mal vor allem auch das Laufzeitverhalten. Während ein Server der mit Perl - oder PHP-Scripten arbeitet, diese jedes Mal neu Übersetzten muss, werden Servlets nur beim ersten Aufruf compiliert, und laufen dann immer wieder schnell ab, bis der Server herunter gefahren werden muss. (Inzwischen gibt es auch für Perl- und PHP-Scripte Lösungen die eine Präkompilierung erlauben.) Die Klassen, die in Servlets verwendet werden, können in Applikationen getestet werden, die in den Entwicklungsumgebungen ablaufen, sogar eine "remote debugging" von Prozessen auf dem Server ist möglich. (Entwicklungsumgebungen für Scriptsprachen kommen nun auch auf.) Aber der größte Vorteil von Java ist sicher die Wiederverwendbarkeit der erstellten Klassen. Ich kann sie in Anwendungen, Applets oder auf dem Server verwenden. Die Objekte über das Netz zwischen all diesen Komponenten verschieben und damit viele Probleme vermeiden, die zwischen unterschiedlichen Plattformen entstehen können.

Der Vorteil Klassen zwischen Rechnern verschieben zu können macht Java auch für Anwendungen interessant, die Profitieren können, wenn man die Arbeit auf viele Computer verteilt. "Grid Computing" ist dabei nicht nur für rechenintensive Programme interessant, auch das Bearbeiten großer Datenmengen kann davon profitieren. Jack Dongarra beschäftigt sich unter anderem mit dem Einsatz von Java für Numerische Probleme. In diesem Artikel über Scientific Computing in Java (Powerpoint) beschreibt er, das der Einsatz von Java sinnvoll ist, und dass moderne JVM's bei geeigneter Programmierung nicht langsamer sind als Fortran oder C Programme. Dabei hat Java besondere Stärken wenn es um "Grid Computing" geht.

Eine wichtige Seite für alle die in Java rechnen wollen ist die Javanumerics Seite .