Java Virtual Machine

Java Virtual Machine
Java-Logo

Die Java Virtual Machine (abgekürzt Java VM oder JVM) ist der Teil der Java-Laufzeitumgebung (JRE) für Java-Programme, der für die Ausführung des Java-Bytecodes verantwortlich ist. Hierbei wird im Normalfall jedes gestartete Java-Programm in seiner eigenen virtuellen Maschine (VM) ausgeführt. Der andere Teil der Java-Laufzeitumgebung sind die Java-Klassenbibliotheken.

Die JVM dient dabei als Schnittstelle zur Maschine und zum Betriebssystem und ist für die meisten Plattformen verfügbar. (z. B. Linux, Mac, Palm OS, Solaris, Windows, usw.). Die JVM ist meist in den Programmiersprachen C und/oder C++ geschrieben.

Die Bestandteile der JVM sind

  • Klassenlader (classloader und resolver),
  • Speicherverwaltung und automatische Speicherbereinigung (garbage collection) und die
  • Ausführungseinheit (execution engine).

Inhaltsverzeichnis

Sicherheitsvorteile

Die Java Virtual Machine bietet neben der Plattformunabhängigkeit auch einen Gewinn an Sicherheit. Sie überwacht zur Laufzeit die Ausführung des Programms, verhindert also zum Beispiel Pufferüberläufe, welche zu unvorhersehbarem Verhalten wie etwa dem Absturz des Programmes führen. Im speziellen Fall von Java fällt diese Überwachung sehr einfach aus, da Java nicht direkt Zeiger unterstützt (nur implizit).

Optimierungsverfahren

Um die Ausführungsgeschwindigkeit (englisch performance) von Java-Programmen zu erhöhen, setzen die meisten Java-VMs sogenannte JIT-Compiler (JITC) ein, die unmittelbar während des Programmablaufs den Bytecode „Just In Time“ („Gerade rechtzeitig“, oder „Gerade zur rechten Zeit") in Maschinencode übersetzen. Eine Weiterentwicklung dieses Ansatzes ist der Hotspot-Optimizer von Sun, welcher mit Dynamischer Optimierung arbeitet.

Dynamische Optimierung

Oft ist zum Zeitpunkt der Kompilierung nicht bekannt, welche konkrete Eingabe eine Software verarbeiten muss. Demzufolge muss die Software mit allen Arten von Eingaben zurechtkommen. Die Eingabe wird demnach in Variablen gespeichert. Nach dem Start des Programms werden jedoch viele Variablen nicht mehr geändert. Folglich sind diese – von einem Zeitpunkt kurz nach dem Start an – Konstanten. Wird nun erst nach diesem Zeitpunkt die Software für die System-Architektur kompiliert (dies ist bei Java Hotspot der Fall), so können diese Konstanten berücksichtigt werden. Bestimmte Verzweigungen, die nur von solchen „Halbkonstanten“ abhängig sind, sind dann für immer eindeutig und stellen somit kein Risiko für eine falsche Sprungvorhersage dar. Ein solcher Programmcode kann also schneller ablaufen als zu früh compilierter Code.

Implementierungen in Hardware

Ausführungen in Hardware sind Java-Prozessoren, Mikroprozessoren, die Java-Bytecode als Maschinensprache verwenden. Sie konnten sich gegen die schnelle Steigerung der Leistungsfähigkeit von Standard-PC und JVM nicht durchsetzen.

Abschottung der Threads

Die Java VM schottet die in ihr laufenden Prozesse vom Betriebssystem ab (Green Threads). Sie bildet standardmäßig Java-Threads durch Threads des Betriebssystems ab. Nur in Ausnahmefällen erfolgt das Thread-Management durch die Java VM. Somit ist es auch möglich, auf einem Betriebssystem, das kein Multithreading unterstützt, eine Java VM mit vollem Funktionsumfang anzubieten.

Die Java VM hat stets volle und standardkonforme Hoheit über die Java Threads, der Programmierer muss nicht von Betriebssystem zu Betriebssystem verschiedene Multi-Threading/Tasking/Processing-Eigenschaften berücksichtigen und kann sich stets auf das JRE verlassen. Nachteil ist, dass Probleme, die von einem Thread ausgehen, seitens des Betriebssystems dem gesamten Prozess zugeordnet werden. Gängige Betriebssysteme (wie zum Beispiel Linux, Windows) erlauben Kontrolle über diese nativen Threads allenfalls über Software von Drittanbietern, wie beispielsweise die mit dem JDK mitgelieferte VisualVM. Standardwerkzeuge wie beispielsweise der Windows Taskmanager zeigen Systemthreads jedoch nicht an.

JVM-Sprachen

Neben Java gibt es auch andere Sprachen, die als Programmiersprachen für JVM-Programme benutzt werden können. Unter anderem folgende Sprachen können auf einer JVM laufen:

  • Clojure, ein Lisp-Dialekt,
  • Erjang, ein Erlang-Dialekt für die JVM,
  • Free Pascal, das auch unter der JVM einen Großteil der ObjectPascal-Konstrukte unterstützt,
  • Groovy, eine dynamisch typisierte Programmiersprache,
  • JRuby, eine 100% Ruby-kompatible Implementierung,
  • Jython (früher: JPython), ist eine reine Java-Implementierung der Programmiersprache Python,
  • Scala, eine Sprache, die Eigenschaften von Java mit funktionaler Programmierung vereint,

Daneben gibt es eine Reihe von Skripting-Sprachen, die von Java aus aufrufbar sind. Dazu gehört JavaScript (aka. ECMA-Skript) mit dem „Rhino“-Interpreter (ein Mozilla-Projekt) sowie JavaFX als eine Skripting-Sprache vor allem für grafische Elemente.

Siehe auch

  • Dalvik – eine von Google für die Android-Plattform entwickelte JVM
  • HotSpot – die am weitesten verbreitete JVM von Oracle
  • IBM J9
  • JRockit (BEA Systems, jetzt Oracle)
  • Kaffe – eine freie GPL-JVM-Implementierung
  • Persistent Reusable Java Virtual Machine (PRJVM) – eine von IBM modifizierte Form der JVM
  • PreonVM, virtuelle Maschine für ressourcenbeschränkte eingebettete Systeme
  • SableVM – freie LGPL JVM-Implementierung

Weblinks


Wikimedia Foundation.

Игры ⚽ Нужна курсовая?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Java Virtual Machine — Machine virtuelle Java La Java virtual machine (abrégé JVM, en français machine virtuelle Java) est une machine virtuelle permettant d’interpréter et d’exécuter le bytecode Java. Architecture générale : illustration du slogan Compile once,… …   Wikipédia en Français

  • Java virtual machine — Machine virtuelle Java La Java virtual machine (abrégé JVM, en français machine virtuelle Java) est une machine virtuelle permettant d’interpréter et d’exécuter le bytecode Java. Architecture générale : illustration du slogan Compile once,… …   Wikipédia en Français

  • Java Virtual Machine —   [Abk. JVM, JavaVM], Java …   Universal-Lexikon

  • Java Virtual Machine — A Java Virtual Machine (JVM) is a set of computer software programs and data structures which use a virtual machine model for the execution of other computer programs and scripts. The model used by a JVM accepts a form of computer intermediate… …   Wikipedia

  • Java Virtual Machine — В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете …   Википедия

  • Java Virtual Machine —    The runtime environment for Java applets and applications; sometimes abbreviated JVM.    The Java Virtual Machine creates a simulated environment that provides the same interface to applications, no matter what hardware and operating system… …   Dictionary of networking

  • Java\ Virtual\ Machine — In den Browsern integrierte Funktion zur Darstellung von Java Applets. Die Java Virtual Machine (VM) ist ein Programm, das Java Code in Maschine Code übersetzt. Damit können Java Applets auf unterschiedlichen Betriebssystemen zur Ausführung… …   Online-Wörterbuch Deutsch-Lexikon

  • Java virtual machine — javos virtualioji mašina statusas T sritis informatika apibrėžtis Programos, parašytos javos tarpine kalba, vadinamos ↑javos baitine programa, interpretatorius. Javos baitinė kalba yra nepriklausoma nuo operacinės sistemos. Įvairios operacinės… …   Enciklopedinis kompiuterijos žodynas

  • Java Virtual Machine Tools Interface — (JVMTI, or more properly, JVM TI) was introduced in J2SE 5.0 ( Tiger ). This interface allows a program to inspect the state and to control the execution of applications running in the Java Virtual Machine (JVM). JVMTI is designed to provide an… …   Wikipedia

  • Java Virtual Machine — noun a software part of the Java runtime environment that can be accessed with commands, like a microprocessor, enabling a set of computer software programs and data structures to use a virtual machine model for the execution of other computer… …   Wiktionary

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”