SF-Interviewfrage: Verstehen Sie das Java-Speichermodell?
360-Interviewfrage: Verteilung des Programmspeichers, fünf Teile
(Lernvideo-Sharing: Java-Lehrvideo)
1. Ausführungsprozess des Java-Programms
Java-Quellcodedatei (Suffix .java) wird vom Java-Compiler in eine Bytecode-Datei (Suffix .class) kompiliert, und dann lädt der Klassenlader in der JVM die Bytecode-Dateien jeder Klasse. Nach Abschluss des Ladevorgangs werden sie zur Ausführung an die JVM-Ausführungs-Engine übergeben . Während des gesamten Programmausführungsprozesses verwendet die JVM einen Bereich zum Speichern von Daten und zugehörigen Informationen, die während der Programmausführung benötigt werden. Dieser Bereich wird im Allgemeinen als Laufzeitdatenbereich bezeichnet, den wir häufig als JVM-Speicher bezeichnen. Daher besteht die Speicherverwaltung, über die wir in Java oft sprechen, darin, diesen Speicherplatz zu verwalten (wie Speicherplatz zugewiesen und zurückgefordert wird).
(Empfehlungen für weitere verwandte Interviewfragen: Java-Interviewfragen und -antworten)
2. Welche Teile umfasst der Laufzeitdatenbereich:
Methodenbereich (Methodenbereich):
Der Methodenbereich ist Jeder von Threads gemeinsam genutzte Speicherbereich wird zum Speichern von Daten wie Klasseninformationen, Konstanten, statischen Variablen und vom Just-in-Time-Compiler kompiliertem Code verwendet, die von der virtuellen Maschine geladen wurden. Wenn der Methodenbereich die Speicherzuweisungsanforderungen nicht erfüllen kann, wird eine OutOfMemoryError-Ausnahme ausgelöst.
Der Methodenbereich speichert die Klassenversion, Felder, Methoden, Schnittstellen und Konstantenpools. Der Konstantenpool speichert wörtliche und symbolische Referenzen. Zu den Symbolreferenzen gehören: 1. Vollqualifizierter Name der Klasse, 2. Feldnamen und Attribute, 3. Methodennamen und Attribute.
JVM-Heap (Java-Heap):
Java-Heap ist auch ein von Threads gemeinsam genutzter Speicherbereich. Er wird beim Start der virtuellen Maschine erstellt und ist der größte Speicherbereich, der von der virtuellen Java-Maschine verwaltet wird Zum Speichern von Objektinstanzen weisen fast alle Objektinstanzen hier Speicher zu. Beachten Sie, dass der Java-Heap der Hauptbereich ist, der vom Garbage Collector verwaltet wird. Daher wird er häufig als GC-Heap bezeichnet, um die Instanz zu vervollständigen Wenn die Zuweisung erfolgt und der Heap nicht erweitert werden kann, wird eine OutOfMemoryError-Ausnahme ausgelöst.
Programmzählerregister:
Wenn der Bytecode-Interpreter arbeitet, ändert er den Wert dieses Zählers, um die nächste auszuführende Bytecode-Anweisung auszuwählen, z. B. Verzweigung, Schleife, Sprung, Ausnahmebehandlung, Grundfunktionen wie z Da die Thread-Wiederherstellung zum Abschluss auf diesen Zähler angewiesen ist.
Um beim Multithreading die korrekte Ausführungsposition wiederherzustellen, benötigt jeder Thread einen unabhängigen Programmzähler. Jeder Thread beeinflusst sich nicht gegenseitig und wird daher unabhängig für den Thread gespeichert.
Virtual Machine Stacks (Java Virtual Machine Stacks):
Der Java Virtual Machine Stack ist ebenfalls privat für den Thread und sein Lebenszyklus ist der gleiche wie der des Threads. Der Stapel der virtuellen Maschine beschreibt das Speichermodell der Java-Methodenausführung: Wenn jede Methode ausgeführt wird, wird ein Stapelrahmen erstellt, um lokale Variablentabellen, Operandenstapel, dynamisch verknüpfte Listen, Methodenexitinformationen usw. zu speichern. Der Prozess vom Aufruf bis zum Abschluss der Ausführung jeder Methode entspricht dem Prozess vom Schieben eines Stapelrahmens in den Stapel der virtuellen Maschine bis zum Herausspringen desselben.
Native Methodenstapel:
Der native Methodenstapel gehört zum privaten Thread-Datenbereich. Dieser Teil bezieht sich hauptsächlich auf die von der virtuellen Maschine verwendete native Methode .
(Verwandte Empfehlung: Java-Einführungs-Tutorial)
Das obige ist der detaillierte Inhalt vonJava-Interview-Speichermodell. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!