Java   Implementierungsstrategien für die JVM  

... [ Seminar "Java und Werkzeuge für das Web" ]  ... [ Inhaltsverzeichnis ]  ... [ zurück ]  ... [ weiter ] ...
     

Bytecode / Interpretation


Komponenten des Java Runtime Systems

Der "Prozessor" der JVM arbeitet Stack-orientiert. Parameter und Rückgabewerte von Methoden werden über einen Stack weitergereicht. Das Gegenstück zu Registern in einer CPU sind hier die lokalen Variablen. Die Implementierung einer JVM wird Java Runtime System genannt. Ein Runtime System besteht im Allgemeinen aus folgenden Komponenten:

  • Execution Engine: Der virtuelle (auch der Hardware-) Prozessor, der den Bytecode der Java-Methoden abarbeitet. 
  • Memory Manager: Speicherverwaltung, Reserviert Speicher, und beinhaltet den Garbage Collector, der nicht mehr benötigten Speicher wieder freigibt. 
  • Error und Exception Manager: Zuständig für die Behandlung von Fehlern (try, catch, throw, ...). 
  • Native Method Support: Ermöglicht das Aufrufen vom Methoden, die mit anderen Programmiersprachen erstellt wurden (C, C++). 
  • Threads Interface: Multithreading in Java wird mit dem Threads Interface verwaltet. 
  • Class Loader: Zuständig für das dynamische Laden von .class-Dateien. 
  • Security Manager: Überprüft, ob die jeweiligen Klassen sicher sind, kontrolliert den Zugriff auf System-Ressourcen.

 

Bytecode

Der Befehlssatz der JVM wird in einem Byte codiert. Somit ist die Anzahl der Befehle im Befehlssatz auf 256 begrenzt. Das bedeutet wiederum, daß nicht für jeden Datentyp gleich viele Befehle existieren, um mit diesem Datentyp zu arbeiten. Es gibt also Datentypen erster Klasse, und Datentypen zweiter Klasse.

  

JVM Datentypen

Die Java-VM unterstützt die folgenden fünf grundlegende Datentypen

  • INT - 32-Bit Ganzzahl-Datentyp mit Vorzeichen

  • LONG - 64-Bit Ganzzahl-Datentyp mit Vorzeichen

  • FLOAT - 32-Bit IEEE-Fliesskomma

  • DOUBLE - 64-Bit IEEE-Fliesskomma

  • ADDRESS - 32-Bit grosser Referenzdatentyp

 

Instruktionen der Java-VM Code   

ILOAD INT     Int Zahl vom Slot auf den Operandenstack legen
ISTORE SLOT  Zahl vom Stack nehmen und im Slot speichern
IADD

Addiert die obersten beiden INT-Zahlen auf dem Stack und ersetzt sie durch das Ergebnis

ISUB wie IADD, jedoch Zahlen subtrahieren
IMUL wie IADD, jedoch Zahlen multiplizieren
BIPUSH NUM NUM auf den Operanden-Stack legen

   


index