Advanced Java Services | Wie Java funktioniert |
Wird erreicht durch eine interpretierende Schicht über dem OS. Diese Schicht stellt die Verbindung zum jeweiligen OS her und sichert so die Plattformunabhängigkeit. Quellcode wird nicht zum Maschinencode der jeweiligen Plattform übersetzt, sondern zu einem Zwischenode, genannt Bytecode, der noch interpretiert werden muß.
Ein Javacompiler übersetzt Quellcode nicht in Maschinencode, sondern in sogenannten Bytecode.
Mehrere Bytecodedateien werden zu einer gezippten Datei gepackt mit neuer Endung *.jar
MyProgram1.class MyProgram2.class .. -> myArchive.jar .. MyProgramx.class
Mehrere Archive werden in ein Verzeichnis gelegt. Über einen speziellen Mechanismus (CLASSPATH) werden sie dem Compiler bekannt gemacht.
Die JVM interpretiert verifiziert den Bytecode und führt ihn nach erfolgreicher Prüfung aus. Die entscheidenden Teile der JVM:
Der Bytecodeverifizierer prüft den Bytecode vor der Ausführung:
Eine Stufe früher nimmt bereits der Compiler ähnliche Überprüfungen vor.
Der Interpreter führt den überprüften Bytecode aus.
Die JVM ist auch für die Speicherverwaltung zuständig.
Im Gegensatz zu einem C/C++ - Programmierer braucht ein Javaprogrammierer sich nicht um die Speicherverwaltung kümmern. Auch diese Aufgabe übernimmt die JVM.
Der Stack ist derjenige Teil des Speichers in dem die lokalen Variablen gespeichert werden. Lokale Variablen tauchen in Funktionen bzw. Methoden auf. Nach Beendigung der Funktion werden sie gelöscht. Der Stack ist also Speicher für Variablen, die nur eine kurze Lebensdauer haben.
Die JVM verwaltet als zweiten Speicherbereich den sog. Heap. Dieser Bereich speichert Daten, die eine längere Lebendauer haben müssen (sowie Daten für Objekte die erst zur Laufzeit initialisiert werden (dynamic memory allocation). Die folgende Graphik illustriert das.
Das Textsegment ist der Bereich, in dem das Programm selbst in assemblierter Form gespeichert wird.
Java Runtime Environment (JRE) ist sozusagen die Hülle um die Java Virtual Machine und stellt die vorgefertigten Klassen zur Verfügung, die der Programmierer für seine Programme verwendet. In der neuesten Version von Java 7 sind es über 4000 Klassen und Interfaces, genauer gesagt 4024 Klassen und Interfaces.
Die API ist die Dokumentation der 4024 Javaklassen, die standardmäßig durch die JRE dem Programmierer zur Verfügung gestellt werden.
In der Archivdatei rt.jar befinden sich die in der API dokumentierten Klassen in compilierter Form als Bytecode. Neben den 4024 dokumentierten Klassen enthält dieses zentrale Archiv noch über 2000 undokumentierte Klassen mit denen die Javaentwickler eine weitgehende Plattformunabhängigkeit herstellen.
Währen die JRE die Möglichkeit zur Verfügung stellt compilierte Javaprogramme laufen zu lassen, ermöglicht es das JDK Javaprogramme zu entwickeln. Das wichtigste Instrument des JDK ist der Javacompiler (javac.exe auf Windowssystemen) der Javaquellcode übersetzt zu Bytecode.
Die ersten Codes für Text entstanden als Telegraphencodes.
Der Unicode soll die Zeichen nahezu aller Sprachen der Welt aufnehmen.
"In den letzten Jahren hat sich der Unicode-Standard erweitert, und Java ist den Erweiterungen gefolgt.
Die Java-Versionen von 1.0 bis 1.4 nutzen den Unicode-Standard 1.1 bis 3.0, der für jedes Zeichen 16 Bit reserviert.
So legt Java jedes Zeichen in 2 Byte ab und ermöglicht die Kodierung von mehr als 65.000 Zeichen. Ab Java 5 ist der
Unicode 4.0-Standard möglich, der 32 Bit für die Abbildung eines Zeichens nötig macht."
(Java ist auch eine Insel Christian Ullenboom)
Wie alle modernen Programmiersprachen so unterstützt auch Java Multithreading. Es gibt also während des Programmablaufs nicht nur entweder-oder Verzweigungen, sondern es können auch mehrere Programmteile (quasi-) gleichzeitig parallel ablaufen. (später mehr bei Codebeispielen)