Zum Inhalt springen

Java Virtual Machine

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 31. Mai 2016 um 12:48 Uhr durch 213.198.87.202 (Diskussion). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Java-Logo

Die Java Virtual Machine (abgekürzt Java VM oder JVM) ist der Teil der Java-Laufzeitumgebung (Java Runtime Environment, 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-

Funktionsprinzip

Die Java Virtual Machine ist dazu da, den vom Java-Compiler erzeugten (plattformunabhängigen) Bytecode plattformabhängig auszuführen. Dazu werden die erzeugten Bytecode-Dateien ( während der Laufzeit in die lokale Maschinensprache übersetzt. Die virtuelle Maschine arbeitet dabei wie ein Interpreter, ist jedoch wesentlich schneller, da z. B. keine Syntaxüberprüfungen mehr vorgenommen werden müssen.

Sicherheitsvorteile

Die Java Virtual Machine bietet neben der Plattformunabhängigkeit des Bytecodes 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 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 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 einem früheren Zeitpunkt kompilierter 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, d.h. der Programmierer braucht nicht die betriebssystemspezifischen Multi-Threading/Tasking/Processing-Eigenschaften zu berücksichtigen und kann sich stets auf die 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,
  • Ceylon,
  • Erjang, ein Erlang-Dialekt für die JVM,
  • Free Pascal, das auch unter der JVM einen Großteil der Object-Pascal-Konstrukte unterstützt,
  • Groovy, eine dynamisch typisierte Programmiersprache,
  • JRuby, eine 100 % Ruby-kompatible Implementierung,
  • Jython (früher: JPython), eine reine Java-Implementierung der Programmiersprache Python,
  • Scala, eine Sprache, die Eigenschaften von Java mit funktionaler Programmierung vereint,
  • Kotlin, eine 2011 vorgestellte Sprache von JetBrains[1]

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

Siehe auch

Commons: Java Virtual Machine – Sammlung von Bildern, Videos und Audiodateien

Einzelnachweise

  1. Kotlin: Erster Web-Auftritt für JetBrains JVM-Sprache, it-republik.de, abgerufen 22. Juli 2012