Heim  >  Artikel  >  Java  >  Einführung in JVM

Einführung in JVM

一个新手
一个新手Original
2017-10-10 09:17:511800Durchsuche

Einführung in JVM

1. Was ist JVM?

JVM ist die Abkürzung für Java Virtual Machine. Dabei handelt es sich um einen fiktiven Computer, der verschiedene Computerfunktionen simuliert. Die Java Virtual Machine umfasst eine Reihe von Bytecode-Anweisungen, eine Reihe von Registern, einen Stapel, einen Garbage-Collection-Heap und ein Speichermethodenfeld. Die JVM schirmt die Informationen ab, die sich auf die spezifische Betriebssystemplattform beziehen, sodass das Java-Programm nur den Zielcode (Bytecode) generieren muss, der auf der virtuellen Java-Maschine ausgeführt wird, und ohne Änderungen auf einer Vielzahl von Plattformen ausgeführt werden kann. Wenn die JVM Bytecode ausführt, interpretiert sie letztendlich den Bytecode in Maschinenanweisungen zur Ausführung auf der spezifischen Plattform.

Ein sehr wichtiges Merkmal der Java-Sprache ist ihre Unabhängigkeit von der Plattform. Die Verwendung einer Java Virtual Machine ist der Schlüssel zum Erreichen dieser Funktion. Will eine allgemeine Hochsprache auf verschiedenen Plattformen laufen, muss sie zumindest in unterschiedliche Zielcodes kompiliert werden. Nach der Einführung der virtuellen Maschine der Java-Sprache muss die Java-Sprache nicht neu kompiliert werden, wenn sie auf verschiedenen Plattformen ausgeführt wird. Die Java-Sprache verwendet die Java Virtual Machine, um Informationen zu bestimmten Plattformen abzuschirmen, sodass der Java-Sprachcompiler nur den Zielcode (Bytecode) generieren muss, der auf der Java Virtual Machine ausgeführt wird, und er ohne Änderung auf mehreren Plattformen ausgeführt werden kann. . Wenn die Java Virtual Machine Bytecode ausführt, interpretiert sie den Bytecode in Maschinenanweisungen zur Ausführung auf der spezifischen Plattform. Aus diesem Grund kann Java „einmal kompilieren und überall ausführen“.

2. Welche Beziehung besteht zwischen JRE/JDK/JVM?

JRE (JavaRuntimeEnvironment, Java-Laufzeitumgebung), die Java-Plattform. Alle Java-Programme müssen unter JRE laufen. Normale Benutzer müssen lediglich das entwickelte Java-Programm ausführen und JRE installieren.

JDK (Java Development Kit) ist ein Entwicklungs-Toolkit, das von Programmentwicklern zum Kompilieren und Debuggen von Java-Programmen verwendet wird. JDK-Tools sind ebenfalls Java-Programme und erfordern zur Ausführung JRE. Um die Unabhängigkeit und Integrität von JDK zu wahren, ist JRE auch Teil der Installation während des JDK-Installationsprozesses. Daher gibt es im JDK-Installationsverzeichnis ein Verzeichnis mit dem Namen jre, in dem JRE-Dateien gespeichert werden.

JVM (JavaVirtualMachine, Java Virtual Machine) ist Teil der JRE. Dabei handelt es sich um einen fiktiven Computer, der durch die Simulation verschiedener Computerfunktionen auf einem tatsächlichen Computer implementiert wird. JVM verfügt über eine eigene vollständige Hardwarearchitektur wie Prozessor, Stapel, Register usw. und verfügt auch über ein entsprechendes Befehlssystem. Das wichtigste Merkmal der Java-Sprache ist der plattformübergreifende Betrieb. Der Zweck der Verwendung von JVM besteht darin, die Unabhängigkeit des Betriebssystems zu unterstützen und plattformübergreifend zu realisieren.

3. JVM-Prinzip

JVM ist der Kern und die Grundlage von Java, einem virtuellen Prozessor zwischen dem Java-Compiler und der Betriebssystemplattform. Dabei handelt es sich um einen abstrakten Computer, der auf dem zugrunde liegenden Betriebssystem und der mit Softwaremethoden implementierten Hardwareplattform basiert und auf dem Java-Bytecode-Programme ausgeführt werden können.

Der Java-Compiler muss sich lediglich an der JVM orientieren und Code- oder Bytecodedateien generieren, die die JVM verstehen kann. Java-Quelldateien werden in Bytecode-Programme kompiliert, und jede Anweisung wird über die JVM in Maschinencode für verschiedene Plattformen übersetzt und auf einer bestimmten Plattform ausgeführt.

4. Der Prozess der JVM-Ausführung des Programms

1) .class-Datei laden 2) Speicher verwalten und zuweisen 3) Garbage Collection durchführen

JRE (Java Runtime Environment) ist die von der JVM erstellte Ausführungsumgebung des Java-Programms. Es ist jedoch gleichzeitig eine Anwendung und ein Prozess eines Betriebssystems Daher verfügt es auch über einen eigenen laufenden Lebenszyklus sowie einen eigenen Code- und Datenraum. JVM befindet sich am Ende des gesamten JDK und ist für die Interaktion des Betriebssystems verantwortlich. Es wird verwendet, um die Betriebssystemumgebung abzuschirmen und eine vollständige Java-Laufumgebung bereitzustellen, sodass es sich auch um einen virtuellen Computer handelt. Das Laden der JVM durch das Betriebssystem wird über Java.exe in jdk abgeschlossen. Die JVM-Umgebung wird durch die folgenden vier Schritte abgeschlossen: 1) JVM-Ladeumgebung und -konfiguration erstellen 2) JVM.dll laden 3) JVM.dll initialisieren und in JNIENV bereitstellen (JNI-Aufrufschnittstelle) Instanz 4) Rufen Sie die JNIEnv-Instanz auf, um die Klassenklasse zu laden und zu verarbeiten.

5. JVM-Lebenszyklus

1) Eine JVM-Instanz entspricht einem unabhängig laufenden Java-Programm, das auf der Prozessebene gestartet wird
a). Wenn ein Java-Programm gestartet wird, wird eine JVM-Instanz generiert. Jede Klasse mit einer öffentlichen statischen void
main(String[] args)-Funktion kann als Ausgangspunkt für die Ausführung der JVM-Instanz
b) verwendet werden. main() dient als Ausgangspunkt für den ersten Thread des Programms, und alle anderen Threads werden von diesem Thread gestartet. Es gibt zwei Arten von Threads innerhalb der JVM: Daemon-Threads und Nicht-Daemon-Threads. Der Daemon-Thread wird normalerweise von der JVM selbst verwendet erstellt ist ein Daemon-Thread
c) Tod. Die JVM wird beendet, wenn alle Nicht-Daemon-Threads im Programm beendet werden. Wenn der Sicherheitsmanager dies zulässt, kann das Programm auch die Runtime-Klasse oder System.exit() verwenden, um

zu beenden

2) Die JVM-Ausführungs-Engine-Instanz entspricht dem Thread des Benutzers, der das Programm ausführt, auf Thread-Ebene

6. JVM-Architektur

  • ClassLoader (wird zum Laden von .class-Dateien verwendet)

  • Ausführungs-Engine (Bytecode ausführen oder lokale Methoden ausführen)

  • Laufzeitdatenbereich (Methodenbereich, Heap, Java-Stack, PC-Register, lokaler Methodenstapel)

7. JVM-Laufzeitdatenbereich

Erster Block: PC-Register

Das PC-Register wird zum Speichern jedes Threads verwendet. Die als nächstes auszuführende JVM-Anweisung, wenn der Da die Methode nativ ist, werden keine Informationen im PC-Register gespeichert.

Zweiter Block: JVM-Stack

Der JVM-Stack ist privat für den Thread Der JVM-Stack ist der aktuelle Thread für Variablen lokaler Basistypen (acht in Java definierte Basistypen: boolean, char, byte, short, int, long, float, double), teilweise zurückgegebene Ergebnisse und Stack Frame, nicht-Basistyp-Objekte Der JVM-Stack speichert nur eine Adresse, die auf den Heap verweist.

Der dritte Block: Heap

Es ist der Bereich, der von der JVM zum Speichern von Objektinstanzen und Array-Werten verwendet wird. Es kann davon ausgegangen werden, dass alle Objekte neu erstellt werden Java Der gesamte Speicher wird hier zugewiesen, und der Speicher von Objekten im Heap muss warten, bis GC recycelt wird.

(1) Der Heap wird von allen Threads in der JVM gemeinsam genutzt, daher erfordert die Zuweisung von Objektspeicher darauf eine Sperre, was auch zum Overhead neuer Objekte führt. Es ist relativ groß

(2) Um die Effizienz der Objektspeicherzuweisung zu verbessern, weist die Sun Hotspot JVM den erstellten Threads einen unabhängigen Speicherplatz TLAB (Thread Local Allocation Buffer) zu, dessen Größe von der JVM entsprechend bestimmt wird Berechnungen zufolge ist beim Zuweisen von Objekten auf TLAB keine Sperre erforderlich. Wenn die JVM Thread-Objekten Speicher zuweist, versucht sie daher, diesen auf TLAB zuzuweisen in der JVM ist im Grunde das gleiche wie in C. Genauso effizient, aber wenn das Objekt zu groß ist, wird die Heap-Speicherplatzzuweisung immer noch direkt verwendet

(3) TLAB wirkt nur auf den neuen Eden Space Daher ist die Zuordnung mehrerer kleiner Objekte beim Schreiben eines Java-Programms effizienter als bei großen Objekten.

(4) Alle neu erstellten Objekte werden in der neuen Generation Yong Generation gespeichert. Wenn die Daten der jungen Generation einen oder mehrere GCs überleben, werden sie an die alte Generation übertragen. Neue Objekte werden immer im Eden Space erstellt.

Der vierte Block: Methodenbereich (Methodenbereich)

(1) Im Sun JDK entspricht dieser Bereich PermanetGeneration, auch bekannt als persistente Generation.

(2) Der Methodenbereich speichert die Informationen der geladenen Klasse (Name, Modifikator usw.), statische Variablen in der Klasse, als endgültiger Typ definierte Konstanten in der Klasse, Feldinformationen in der Klasse usw Wenn Entwickler Informationen über getName, isInterface und andere Methoden im Klassenobjekt im Programm erhalten, werden diese Daten auch global gemeinsam genutzt Seien Sie GC. Wenn der vom Methodenbereich benötigte Speicher seine zulässige Größe überschreitet, wird eine OutOfMemory-Fehlermeldung ausgegeben.

Der fünfte Block: Laufzeitkonstantenpool

speichert feste Konstanteninformationen, Methoden- und Feldreferenzinformationen in der Klasse usw. Sein Platz wird aus dem Methodenbereich zugewiesen.

Der sechste Block: Native Method Stacks (Native Method Stacks)

JVM verwendet native Methodenstacks, um die Ausführung nativer Methoden zu unterstützen. Dieser Bereich wird zum Speichern der einzelnen Methoden verwendet native Der Status des Methodenaufrufs.

8. Das Grundprinzip der JVM-Garbage Collection

GC (Garbage Collection): Recyceln Sie Objekte, die nicht mehr im Speicher verwendet werden Die für das Recycling in GC verwendete Methode wird als Collector bezeichnet. Da GC einige Ressourcen und Zeit verbrauchen muss, sammelt Java Objekte der neuen Generation und der alten Generation, nachdem die Lebenszykluseigenschaften der Objekte analysiert wurden, um die Sammlung von Objekten zu maximieren . Mögliche Verkürzung der durch GC verursachten Pause in der Anwendung

(1) Die Sammlung von Objekten in der neuen Generation wird als kleinere GC bezeichnet. (2) Die Sammlung von Objekten in der alten Die Generierung wird als Full GC bezeichnet. (3) Der durch den aktiven Aufruf von System.gc() im Programm erzwungene GC ist Full GC.

Verschiedene Objektreferenztypen. GC verwendet unterschiedliche Methoden zum Recyceln von JVM-Objektreferenzen, die in vier Typen unterteilt sind:

(1) Starke Referenz: Standardmäßig verwenden Objekte starke Referenzen (Instanzen dieses Objekts haben keine anderen Objektreferenzen und werden nur in GC recycelt)

(2) Weiche Referenz: Weiche Referenz ist eine In Java bereitgestellte Anwendung, die besser für Caching-Szenarien geeignet ist (sie wird nur GC-fähig, wenn der Speicher nicht ausreicht)

(3) Schwache Referenz: Sie wird während der GC auf jeden Fall von GC recycelt

(4) Virtuelle Referenz: Da die virtuelle Referenz nur verwendet wird, um zu wissen, ob das Objekt GC war

Der Hauptinhalt stammt von: http://baike.baidu.com/link ? url=r1DppgYdvfVHc2I0uVBfCgYd0MiNXrSMKU-E3AL_O5yvrQ3fL1FNvpNgS9MUk9H-#4 und http://wenku.baidu.com/link?url=UXf-aoHl8YCX535q4G2qC48OExWk9ttLaIPW4Qn-GvdeSrM0WSju Abq_78MJUrHq46ZS-8OsHDCMKkwmJTmXkPrkBZmbNqOA49iDyxsLIkm

1 Was ist JVM?

JVM ist die Abkürzung für Java Virtual Machine. Dabei handelt es sich um einen fiktiven Computer, der verschiedene Computerfunktionen simuliert. Die Java Virtual Machine umfasst eine Reihe von Bytecode-Anweisungen, eine Reihe von Registern, einen Stapel, einen Garbage-Collection-Heap und ein Speichermethodenfeld. Die JVM schirmt die Informationen ab, die sich auf die spezifische Betriebssystemplattform beziehen, sodass das Java-Programm nur den Zielcode (Bytecode) generieren muss, der auf der virtuellen Java-Maschine ausgeführt wird, und ohne Änderungen auf einer Vielzahl von Plattformen ausgeführt werden kann. Wenn die JVM Bytecode ausführt, interpretiert sie letztendlich den Bytecode in Maschinenanweisungen zur Ausführung auf der spezifischen Plattform.

Ein sehr wichtiges Merkmal der Java-Sprache ist ihre Unabhängigkeit von der Plattform. Die Verwendung einer Java Virtual Machine ist der Schlüssel zum Erreichen dieser Funktion. Will eine allgemeine Hochsprache auf verschiedenen Plattformen laufen, muss sie zumindest in unterschiedliche Zielcodes kompiliert werden. Nach der Einführung der virtuellen Maschine der Java-Sprache muss die Java-Sprache nicht neu kompiliert werden, wenn sie auf verschiedenen Plattformen ausgeführt wird. Die Java-Sprache verwendet die Java Virtual Machine, um Informationen zu bestimmten Plattformen abzuschirmen, sodass der Java-Sprachcompiler nur den Zielcode (Bytecode) generieren muss, der auf der Java Virtual Machine ausgeführt wird, und er ohne Änderung auf mehreren Plattformen ausgeführt werden kann. . Wenn die Java Virtual Machine Bytecode ausführt, interpretiert sie den Bytecode in Maschinenanweisungen zur Ausführung auf der spezifischen Plattform. Aus diesem Grund kann Java „einmal kompilieren und überall ausführen“.

2. Welche Beziehung besteht zwischen JRE/JDK/JVM?

JRE (JavaRuntimeEnvironment, Java-Laufzeitumgebung), die Java-Plattform. Alle Java-Programme müssen unter JRE laufen. Normale Benutzer müssen lediglich das entwickelte Java-Programm ausführen und JRE installieren.

JDK (Java Development Kit) ist ein Entwicklungs-Toolkit, das von Programmentwicklern zum Kompilieren und Debuggen von Java-Programmen verwendet wird. JDK-Tools sind ebenfalls Java-Programme und erfordern zur Ausführung JRE. Um die Unabhängigkeit und Integrität von JDK zu wahren, ist JRE auch Teil der Installation während des JDK-Installationsprozesses. Daher gibt es im JDK-Installationsverzeichnis ein Verzeichnis mit dem Namen jre, in dem JRE-Dateien gespeichert werden.

JVM (JavaVirtualMachine, Java Virtual Machine) ist Teil der JRE. Dabei handelt es sich um einen fiktiven Computer, der durch die Simulation verschiedener Computerfunktionen auf einem tatsächlichen Computer implementiert wird. JVM verfügt über eine eigene vollständige Hardware-Architektur wie Prozessor, Stack, Register usw. und verfügt auch über ein entsprechendes Befehlssystem. Das wichtigste Merkmal der Java-Sprache ist der plattformübergreifende Betrieb. Der Zweck der Verwendung von JVM besteht darin, die Unabhängigkeit des Betriebssystems zu unterstützen und plattformübergreifend zu realisieren.

3. JVM-Prinzip

JVM ist der Kern und die Grundlage von Java, einem virtuellen Prozessor zwischen dem Java-Compiler und der Betriebssystemplattform. Dabei handelt es sich um einen abstrakten Computer, der auf dem zugrunde liegenden Betriebssystem und der mit Softwaremethoden implementierten Hardwareplattform basiert und auf dem Java-Bytecode-Programme ausgeführt werden können.

Der Java-Compiler muss sich lediglich an der JVM orientieren und Code- oder Bytecodedateien generieren, die die JVM verstehen kann. Java-Quelldateien werden in Bytecode-Programme kompiliert, und jede Anweisung wird über die JVM in Maschinencode für verschiedene Plattformen übersetzt und auf einer bestimmten Plattform ausgeführt.

4. Der Prozess der JVM-Ausführung des Programms

1) .class-Datei laden 2) Speicher verwalten und zuweisen 3) Garbage Collection ausführen

JRE (Java-Laufzeitumgebung) ist die von der JVM erstellte Ausführungsumgebung des Java-Programms. Es handelt sich jedoch um ein Betriebssystem, eine Anwendung und gleichzeitig ein Prozess, sodass auch ein eigener Code- und Datenraum für den laufenden Lebenszyklus vorhanden ist. JVM befindet sich am Ende des gesamten JDK und ist für die Interaktion des Betriebssystems verantwortlich. Es wird verwendet, um die Betriebssystemumgebung abzuschirmen und eine vollständige Java-Laufumgebung bereitzustellen, sodass es sich auch um einen virtuellen Computer handelt. Das Laden der JVM durch das Betriebssystem wird über Java.exe in jdk abgeschlossen. Die JVM-Umgebung wird durch die folgenden vier Schritte abgeschlossen: 1) JVM-Ladeumgebung und -konfiguration erstellen 2) JVM.dll laden 3) JVM.dll initialisieren und in JNIENV einhängen (JNI-Aufrufschnittstelle) Instanz 4) Rufen Sie die JNIEnv-Instanz auf, um die Klassenklasse zu laden und zu verarbeiten.

5. JVM-Lebenszyklus

1) Die JVM-Instanz entspricht einem unabhängig laufenden Java-Programm, das auf der Prozessebene gestartet wird
a). Wenn ein Java-Programm gestartet wird, wird eine JVM-Instanz generiert. Jede Klasse mit einer öffentlichen statischen void
main(String[] args)-Funktion kann als Ausgangspunkt für die Ausführung der JVM-Instanz
b) verwendet werden. main() dient als Ausgangspunkt für den ersten Thread des Programms, und alle anderen Threads werden von diesem Thread gestartet. Es gibt zwei Arten von Threads innerhalb der JVM: Daemon-Threads und Nicht-Daemon-Threads. Der Daemon-Thread wird normalerweise von der JVM selbst verwendet erstellt ist ein Daemon-Thread
c) Tod. Die JVM wird beendet, wenn alle Nicht-Daemon-Threads im Programm beendet werden. Wenn der Sicherheitsmanager dies zulässt, kann das Programm auch die Runtime-Klasse oder System.exit() verwenden, um

zu beenden 2) Die JVM-Ausführungs-Engine-Instanz entspricht dem Thread des Benutzers, der das Programm ausführt, auf Thread-Ebene

6. JVM-Architektur


  • ClassLoader (wird zum Laden von .class-Dateien verwendet)

  • Ausführungs-Engine (Bytecode ausführen oder lokale Methoden ausführen)

  • Laufzeitdatenbereich (Methodenbereich, Heap, Java-Stack, PC-Register, lokaler Methodenstapel)

7. JVM-Laufzeitdatenbereich

Erster Block: PC-Register

Das PC-Register wird zum Speichern der JVM-Anweisungen verwendet, die jeder Thread als nächstes ausführt. Wenn die Methode nativ ist, werden keine Informationen im PC-Register gespeichert.

Zweiter Block: JVM-Stack

Der JVM-Stack ist privat für den Thread Der JVM-Stack ist der aktuelle Thread für Variablen lokaler Basistypen (acht in Java definierte Basistypen: boolean, char, byte, short, int, long, float, double), teilweise zurückgegebene Ergebnisse und Stack Frame, nicht-Basistyp-Objekte Der JVM-Stack speichert nur eine Adresse, die auf den Heap verweist.

Der dritte Block: Heap

Es ist der Bereich, der von der JVM zum Speichern von Objektinstanzen und Array-Werten verwendet wird. Es kann davon ausgegangen werden, dass alle Objekte neu erstellt werden Java Der gesamte Speicher wird hier zugewiesen, und der Speicher von Objekten im Heap muss warten, bis GC recycelt wird.

(1) Der Heap wird von allen Threads in der JVM gemeinsam genutzt, daher erfordert die Zuweisung von Objektspeicher darauf eine Sperre, was auch zum Overhead neuer Objekte führt. Es ist relativ groß

(2) Um die Effizienz der Objektspeicherzuweisung zu verbessern, weist die Sun Hotspot JVM den erstellten Threads einen unabhängigen Speicherplatz TLAB (Thread Local Allocation Buffer) zu, dessen Größe von der JVM entsprechend bestimmt wird Berechnungen zufolge ist beim Zuweisen von Objekten auf TLAB keine Sperre erforderlich. Wenn die JVM Thread-Objekten Speicher zuweist, versucht sie daher, diesen auf TLAB zuzuweisen in der JVM ist im Grunde das gleiche wie in C. Genauso effizient, aber wenn das Objekt zu groß ist, wird die Heap-Speicherplatzzuweisung immer noch direkt verwendet

(3) TLAB wirkt nur auf den neuen Eden Space Daher ist die Zuordnung mehrerer kleiner Objekte beim Schreiben eines Java-Programms effizienter als bei großen Objekten.

(4) Alle neu erstellten Objekte werden in der neuen Generation Yong Generation gespeichert. Wenn die Daten der jungen Generation einen oder mehrere GCs überleben, werden sie an die alte Generation übertragen. Neue Objekte werden immer im Eden Space erstellt.

Der vierte Block: Methodenbereich (Methodenbereich)

(1) Im Sun JDK entspricht dieser Bereich PermanetGeneration, auch bekannt als persistente Generation.

(2) Der Methodenbereich speichert die Informationen der geladenen Klasse (Name, Modifikator usw.), statische Variablen in der Klasse, als endgültiger Typ definierte Konstanten in der Klasse, Feldinformationen in der Klasse usw Wenn Entwickler Informationen über getName, isInterface und andere Methoden im Klassenobjekt im Programm erhalten, werden diese Daten auch global gemeinsam genutzt Seien Sie GC. Wenn der vom Methodenbereich benötigte Speicher seine zulässige Größe überschreitet, wird eine OutOfMemory-Fehlermeldung ausgegeben.

Der fünfte Block: Laufzeitkonstantenpool

speichert feste Konstanteninformationen, Methoden- und Feldreferenzinformationen in der Klasse usw. Sein Platz wird aus dem Methodenbereich zugewiesen.

Der sechste Block: Native Method Stacks (Native Method Stacks)

JVM verwendet native Methodenstacks, um die Ausführung nativer Methoden zu unterstützen. Dieser Bereich wird zum Speichern der einzelnen Methoden verwendet native Der Status des Methodenaufrufs.

8. Das Grundprinzip der JVM-Garbage Collection

GC (Garbage Collection): Recyceln Sie Objekte, die nicht mehr im Speicher verwendet werden Die Recyclingmethode wird als Collector bezeichnet. Da GC einige Ressourcen und Zeit verbrauchen muss, sammelt Java Objekte der neuen und alten Generation, nachdem die Lebenszykluseigenschaften der Objekte analysiert wurden, um die Zeit so weit wie möglich zu verkürzen verursacht durch GC zur Anwendung

(1) Die Sammlung von Objekten in der neuen Generation wird als kleinere GC bezeichnet;

(2) Die Sammlung von Objekten in der alten Generation wird als vollständige GC bezeichnet;

(3) Der GC, der durch den aktiven Aufruf von System.gc() im Programm erzwungen wird, ist ein vollständiger GC.

Verschiedene Objektreferenztypen. GC verwendet unterschiedliche Methoden zum Recyceln. JVM-Objektreferenzen sind in vier Typen unterteilt:

(1) Starke Referenz: Standardmäßig verwendet das Objekt Alle sind starke Referenzen (Die Instanz dieses Objekts hat keine anderen Objektreferenzen und wird nur in GC recycelt)

(2) Soft-Referenz: Soft-Referenz ist eine in Java bereitgestellte Anwendung, die besser für Caching-Szenarien geeignet ist ( Es wird nur GCed werden, wenn der Speicher nicht ausreicht)

(3) Schwache Referenz: Sie wird während der GC definitiv von GC recycelt

(4) Virtuelle Referenz: Da virtuelle Referenz nur verwendet wird Wissen ob das Objekt GC war

Das obige ist der detaillierte Inhalt vonEinführung in JVM. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn