Das von Oracle offiziell definierte Java-Technologiesystem umfasst hauptsächlich die folgenden Teile:
Java-Programmierung Sprache
Java Virtual Machine für verschiedene Plattformen
Klassendateiformat
Java API-Klassenbibliothek
Java-Klassenbibliothek von Drittanbietern
Die drei Teile der Java-Programmiersprache, der Java Virtual Machine und der Java API-Klassenbibliothek können gemeinsam bezeichnet werden als JDK (Java Development Kit) bezeichnet, das die Mindestumgebung für die Entwicklung von Java-Programmen darstellt. Darüber hinaus werden die Java SE API-Teilmenge und die Java Virtual Machine in der Java API gemeinsam als JRE (Java Runtime Environment) bezeichnet, die Standardumgebung für die Ausführung von Java-Programmen.
Der Grund, warum die Java Virtual Machine „virtuell“ genannt wird, liegt darin, dass es sich nur um einen abstrakten Computer handelt, der durch eine Spezifikation definiert ist
Die virtuellen Maschinen, die mit Oracle JDK und OpenJDK geliefert werden, sind die gängigsten und am weitesten verbreiteten virtuellen Java-Maschinen. Technische Artikel, in denen die Java Virtual Machine vorgestellt wird, stellen, sofern nicht anders angegeben, in den meisten Fällen HotSpot VM
vor. HotSpot VM wurde nicht von Sun entwickelt, sondern von Longview Technologies, einem kleinen Unternehmen, das 1997 von Sun und 2009 von Oracle übernommen wurde. J9 VM
J9 VM ist eine von IBM entwickelte VM und derzeit die wichtigste Java Virtual Machine für die Entwicklung. Die Marktpositionierung von J9 VM ähnelt der von HotSpot VM. Es handelt sich um eine vielseitige virtuelle Maschine, die für alles von Server über Desktop-Anwendungen bis hin zu eingebetteten Anwendungen konzipiert ist. Das aktuelle Leistungsniveau von J9 VM liegt ungefähr auf dem gleichen Niveau wie HotSpot VM.
Zing VM
Basierend auf Oracles HotSpot VM verbessert es viele Details, die sich auf die Latenz auswirken. Die drei größten Verkaufsargumente sind:
Wie Sie auf dem Bild oben sehen können,
hat die Java Virtual Machine keine notwendige Verbindung mit der Java-Sprache. Sie bezieht sich nur auf eine bestimmte Binärdatei: die Klassendatei.
4. Struktur der Java Virtual MachineJVM = Klassenlader, Klassenlader + Ausführungsmotor, Ausführungsmotor + Laufzeitdatenbereich
. Classloader lädt die Klassendatei auf der Festplatte in den Laufzeitdatenbereich in der JVM, ist aber nicht dafür verantwortlich, ob die Klassendatei ausgeführt werden kann, was in der Verantwortung der Ausführungs-Engine liegt .
Die abstrakte Spezifikation der Java Virtual Machine ist nur ein Konzept. Im Allgemeinen ist die Java Virtual Machine eine spezifische Implementierung der Spezifikation. Diese Implementierung kann von mehreren Anbietern stammen und auf mehreren Plattformen existieren. Es kann vollständig in Software oder in einer Kombination aus Hardware und Software implementiert werden.5. Lebenszyklus einer virtuellen Maschine
. Wenn drei Java-Programme gleichzeitig auf demselben Computer ausgeführt werden, werden drei Java Virtual Machine-Instanzen erhalten. Jedes Java-Programm wird in einer eigenen Java Virtual Machine-Instanz ausgeführt. Eine Java Virtual Machine-Instanz führt ein Java-Programm aus, indem sie die main()-Methode einer Anfangsklasse aufruft. Die main()-Methode muss öffentlich und statisch sein, void zurückgeben und ein String-Array als Parameter akzeptieren. Jede Klasse mit einer solchen main()-Methode kann als Ausgangspunkt für die Ausführung eines Java-Programms verwendet werden.
Im obigen Beispiel wird die main()-Methode in der Anfangsklasse des Java-Programms als Ausgangspunkt für den Anfangsthread des Programms verwendet, und alle anderen Threads werden von diesem Anfangsthread gestartet.
Es gibt zwei Arten von Threads innerhalb der Java Virtual Machine: Daemon-Threads und Nicht-Daemon-Threads . Daemon-Threads werden normalerweise von der virtuellen Maschine selbst verwendet, z. B. Threads, die Garbage-Collection-Aufgaben ausführen . Ein Java-Programm kann jedoch auch jeden von ihm erstellten Thread als Daemon-Thread markieren. Der anfängliche Thread im Java-Programm – derjenige, der in main() beginnt – ist ein Nicht-Daemon-Thread.
Solange Nicht-Daemon-Threads ausgeführt werden, wird das Java-Programm weiterhin ausgeführt. Wenn alle Nicht-Daemon-Threads im Programm beendet werden, wird die Instanz der virtuellen Maschine automatisch beendet . Wenn der Sicherheitsmanager es zulässt, kann das Programm selbst auch beendet werden, indem die exit()-Methode der Klasse Runtime oder der Klasse System aufgerufen wird.
Das obige ist der detaillierte Inhalt vonDetaillierte Übersicht über die Java Virtual Machine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!