Heim >Java >javaLernprogramm >Detaillierte Erläuterung des Betriebsmechanismus der virtuellen Java JVM-Maschine
JVM (Java Virtual Machine) Eine Spezifikation für Computergeräte, die auf unterschiedliche Weise implementiert werden können (Software oder Hardware). Als nächstes gibt Ihnen dieser Artikel eine kurze Einführung in den Betriebsmechanismus der Java JVM Virtual Machine. Interessierte Freunde sollten einen Blick darauf werfen
1: Grundkonzepte von JVM
JVM (Java Virtual Machine) Eine Spezifikation für Computergeräte, die auf unterschiedliche Weise (Software oder Hardware) implementiert werden können. Das Kompilieren des Befehlssatzes für eine virtuelle Maschine ähnelt stark dem Kompilieren des Befehlssatzes für einen Mikroprozessor. Die Java Virtual Machine umfasst eine Reihe von Bytecode-Anweisungen, eine Reihe von Registern, einen Stapel, einen Garbage-Collection-Heap und ein Speichermethodenfeld.
Die Java Virtual Machine (JVM) ist ein imaginärer Computer, der Java-Code ausführen kann. Solange der Interpreter gemäß der JVM-Spezifikation auf einen bestimmten Computer portiert wird, kann garantiert werden, dass jeder kompilierte Java-Code auf diesem System ausgeführt wird.
Sehen wir uns das Architekturdiagramm von Jvm an:
2: Die Verbindung und der Unterschied zwischen interpretierten Sprachen und kompilierten Sprachen .
Kompilierte Sprache verwendet einen Compiler, um das Programm in Maschinencode zu kompilieren, der vom Zielcomputer erkannt werden kann, während interpretierte Sprache keinen Kompilierungsprozess erfordert und das Skript vom Zielcomputer gelesen wird Interpreter der Sprache, interpretieren Sie gemäß den Grammatikregeln und rufen Sie dann die integrierten Befehle des Interpreters auf (oder die Bibliothek Funktion ). Nachdem beispielsweise die printf()-Funktion der C-Sprache statisch kompiliert wurde, werden alle für printf() erforderlichen Codes in Form von Maschinencode in die ausführbare Datei geschrieben Die Shell wird ausgeführt. Suchen Sie beim Ausführen eines Programms nach der Datei im angegebenen Pfad . Anschließend lädt der Loader (Loader) die ELF-Datei des Programms in den Speicher, springt zum Programmeintrag und übergibt Kontrolle über das Programm.
Bei der dynamischen Kompilierung ist die Situation etwas anders. Da printf() eine sehr häufig verwendete Funktion ist, sammelt das System allgemeine Funktionen in einer Bibliothek. Wenn ich eine Myprintf()-Funktion schreibe und printf() aufrufe, enthält die nach der dynamischen Kompilierung erstellte ELF-Datei keine Code im Zusammenhang mit printf(), aber es gibt einige Informationen, die dem System mitteilen: „Mein Programm ruft printf() auf, daher benötige ich die Adresse von printf().“ Führen Sie nach dem Laden der ELF-Datei zunächst den dynamischen Connector (ldd) aus, von dem das Programm abhängt. Wenn die dynamische Bibliothek nicht im System geladen ist, wird das System benachrichtigt, die Bibliothek zu laden und den Eintrag zu binden Geben Sie bei Bedarf die Adresse der Bibliotheksfunktion an das Programm an. Springen Sie dann zur Programmeintragsadresse und starten Sie die Ausführung des Programms. Hier wird das von uns geschriebene Programm, sobald es kompiliert ist, zum Maschinencode einer bestimmten Maschine und einigen Zusatzinformationen (Symboltabelle, Adresse, Wert der Variablen usw.) und wird dann durch das Programm „dynamisch“. Systemlade- und Betriebsmechanismus. „Prozedur“ – Prozess.
Der Ausführungsprozess interpretierter Sprachen kann nicht vom Interpreter, Python, Perl, Ruby usw. getrennt werden. Daher lautet die erste Zeile des Skripts normalerweise #/usr/bin/×××. ××× repräsentiert den entsprechenden Interpreter für jede Sprache. Skripte bestehen im Allgemeinen aus Ausdruck(Ausdruck) und einem Ausdrucksblock. Das erste, was der Interpreter tun muss, ist, die Ausdrucksstruktur zu analysieren und zu verstehen, um eine „Ausführungssequenz“ zu bilden. Diese „Ausführungssequenz“ ist neutral und zielt nicht auf eine native Maschine ab, daher ist ihre „Portabilität“ hoch. Der Grund, warum hier nicht „Bytecode“ anstelle von „Ausführungssequenz“ verwendet wird, liegt darin, dass es in JVM ein Konzept für Bytecode gibt und es erhebliche Unterschiede zwischen ihnen gibt. Die Festlegung der Ausführungsreihenfolge ist die wichtigste Aufgabe des Dolmetschers. Angenommen, die von Python ausgegebene Funktion ist python_print(). Wenn der Python-Interpreter dann beim „Interpretieren“ des Skripts auf diesen Ausdruck stößt, ruft er die Funktion print() des Systems auf, um den Ausgabevorgang auszuführen. Sie können das Skript auch als eine übergeordnete Konfigurationsdatei verstehen. Diese Datei weist den Python-Interpreter an, wie er ausgeführt werden soll. Es wurden mehrere Regeln für die Ausführung formuliert.
3: Java-Ausführungsprozess
Die JVM-Ausführung von Java-Programmen ist komplizierter als die beiden oben genannten, da sie bereits als Maschine bezeichnet wird. Die folgende Abbildung ist das Strukturblockdiagramm der JVM. Enthält hauptsächlich: Garbage Collector, Klassenlade-Subsystem, Ausführungs-Engine, Laufzeitdatenbereich usw.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Betriebsmechanismus der virtuellen Java JVM-Maschine. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!