Java Virtual Machine (JVM), Unterschied, JDK, JRE und JVM – Core-Java
Java ist eine high-level-Programmiersprache. Ein in Hochsprache geschriebenes Programm kann nicht direkt auf einem Computer ausgeführt werden. Zuerst muss es in diese bestimmte Maschinensprache übersetzt werden. Der Javac-Compiler macht dieses Ding, es braucht Java-Programm (.java-Datei mit Quellcode) und übersetzt es in Maschinencode (als Byte-Code bezeichnet oder .Klassendatei).,
Java Virtual Machine (JVM) ist eine virtuelle Maschine, die sich in der realen Maschine (Ihrem Computer) befindet, und die Maschinensprache für JVM ist Bytecode. Dies macht es für den Compiler einfacher, da er Byte-Code für JVM und nicht für jeden Maschinentyp anderen Maschinencode generieren muss. JVM führt den vom Compiler generierten Bytecode aus und erzeugt eine Ausgabe. JVM ist diejenige, die Java-Plattform unabhängig macht.
Jetzt haben wir verstanden, dass die primäre Funktion von JVM darin besteht, den vom Compiler erzeugten Bytecode auszuführen., Jedes Betriebssystem verfügt über eine andere JVM, die Ausgabe, die sie nach der Ausführung des Bytecodes erzeugen, ist jedoch für alle Betriebssysteme gleich. Das bedeutet, dass der unter Windows generierte Bytecode unter Mac OS und umgekehrt ausgeführt werden kann. Deshalb nennen wir Java als plattformunabhängige Sprache. Dasselbe ist im folgenden Diagramm zu sehen:
Um alles zusammenzufassen: Die Java Virtual machine (JVM) ist die virtuelle Maschine, die auf der tatsächlichen Maschine (Ihrem Computer) ausgeführt wird und Java-Bytecode ausführt., Die JVM versteht Java – Quellcode nicht, deshalb müssen wir einen Javac-Compiler haben, der *kompiliert.java-Dateien zu erhalten *.Klassendateien, die die Bytecodes enthalten, die von der JVM verstanden werden. JVM macht Java portabel (einmal schreiben, überall ausführen). Jedes Betriebssystem verfügt über eine andere JVM, die Ausgabe, die sie nach der Ausführung des Bytecodes erzeugen, ist jedoch für alle Betriebssysteme gleich.
JVM-Architektur
mal sehen, wie die JVM arbeitet:
Class Loader: Der class-loader liest .,klassendatei und speichern Sie den Bytecode im Methodenbereich.
Methodenbereich: In einer JVM gibt es nur einen Methodenbereich, der von allen Klassen gemeinsam genutzt wird. Dies enthält die Klassenebene Informationen von jedem .Klassendatei.
Heap: Heap ist ein Teil des JVM-Speichers, in dem Objekte zugewiesen werden. JVM erstellt für jedes ein Klassenobjekt .Klassendatei.
Stack: Stack ist auch ein Teil des JVM-Speichers, wird jedoch im Gegensatz zu Heap zum Speichern temporärer Variablen verwendet.
PC-Register: Dies verfolgt, welche Anweisung ausgeführt wurde und welche ausgeführt werden soll., Da Anweisungen von Threads ausgeführt werden, verfügt jeder Thread über ein separates PC-Register.
Native Method Stack: Eine native Methode kann auf die Laufzeitdatenbereiche der virtuellen Maschine zugreifen.
Native Methodenschnittstelle: Java-Code kann von nativen Anwendungen aufgerufen oder aufgerufen werden. Native Anwendungen sind Programme, die für die Hardware und das Betriebssystem eines Systems spezifisch sind.
Garbage Collection: Eine Klasseninstanz wird explizit vom Java-Code erstellt und nach der Verwendung automatisch durch Garbage Collection für die Speicherverwaltung zerstört.,
JVM Vs JRE Vs JDK
JRE: JRE ist die Umgebung, in der die virtuelle Java-Maschine ausgeführt wird. JRE enthält Java Virtual Machine (JVM), Klassenbibliotheken und andere Dateien ohne Entwicklungstools wie Compiler und Debugger.
Was bedeutet, dass Sie den Code in JRE ausführen können, den Code jedoch nicht in JRE entwickeln und kompilieren können.
JVM: Wie oben beschrieben, führt JVM das Programm mithilfe von Klassen, Bibliotheken und Dateien aus, die von JRE bereitgestellt werden.,
JDK: JDK ist eine Obermenge von JRE, es enthält alles, was JRE zusammen mit Entwicklungstools wie Compiler, Debugger usw. hat.