Detaillierte Erklärung des Java-Speichermechanismus (Bilder und Text)
Dieser Artikel stellt hauptsächlich das relevante Wissen über den Speichermechanismus von Java vor, der einen sehr guten Referenzwert hat. Schauen wir ihn uns mit dem folgenden Editor an
Java unterteilt den Speicher in zwei Typen: einen Es handelt sich um Stapelspeicher und das andere um Heapspeicher. Einige in der Funktion definierte Grundtypen von Variablen und Objektreferenzvariablen werden im Stapelspeicher der Funktion zugewiesen. Wenn eine Variable in einem Codeblock definiert wird, weist Java der Variablen Speicherplatz zu Der Gültigkeitsbereich der Variablen wird überschritten (wenn beispielsweise Funktion B in Funktion A aufgerufen wird und Variable a in Funktion B definiert ist, gilt der Gültigkeitsbereich von Variable a nur für Funktion B. Nach der Ausführung von Funktion B wird Variable a automatisch zerstört. Zugewiesen zu Sein Speicher wird recycelt), Java gibt den für die Variable zugewiesenen Speicherplatz automatisch frei und der Speicherplatz kann sofort für andere Zwecke verwendet werden.
Heap-Speicher wird zum Speichern des von new erstellten Speicherarrays verwendet. Der im Heap zugewiesene Speicher wird vom automatischen Garbage Collector der Java Virtual Machine verwaltet. Nach dem Generieren eines Arrays oder Objekts im Heap können Sie auch eine spezielle Variable im Stapel definieren, sodass der Wert der Variablen im Stapel der ersten Adresse des Arrays oder Objekts im Heap-Speicher entspricht Nach dem Abrufen der Referenzvariablen des Arrays oder Objekts können Sie die Variable im Stapel verwenden, um auf das Array oder Objekt im Heap im Programm zuzugreifen. Die Referenzvariable entspricht der Angabe eines Namens für das Array oder Objekt. Referenzvariablen sind gewöhnliche Variablen, die bei der Definition auf dem Stapel zugewiesen werden. Die Referenzvariablen werden freigegeben, nachdem das Programm außerhalb anderer Bereiche ausgeführt wurde. Arrays und Objekte werden im Heap zugewiesen. Auch wenn das Programm außerhalb des Codeblocks ausgeführt wird, in dem sich die von new generierte Array- oder Objektanweisung befindet, wird der vom Array und Objekt belegte Speicher nicht freigegeben. Arrays und Objekte werden zu Müll, wenn keine Referenzvariablen auf sie verweisen und nicht mehr verwendet werden können. Sie werden zu einem unbestimmten Zeitpunkt später vom Garbage Collector gesammelt (freigegeben). Dies ist auch der Grund, warum Java mehr Speicher beansprucht. Tatsächlich verweisen Variablen im Stapel auf Variablen im Heap-Speicher, die in Java Zeiger sind.
Codebeispiel Demo1: Erstellung eines einzelnen Objekts
class Person { String name ; int age ; public void tell() { System.out.println("姓名:"+name+",年龄:"+age); } } public class Demo1 { public static void main(String[] args) { Person per = new Person() ; } }
Im obigen Programm wird ein Objekt pro instanziiert und muss währenddessen im Speicher zugewiesen werden Instanziierungsprozess. Der Speicherplatz, der Stapelspeicher und Heapspeicher umfasst, ist in der folgenden Abbildung dargestellt:
Abbildung 1-1 Objektinstanziierungsprozess
Aus der obigen Abbildung können wir ersehen, dass der Objektname pro im Stapelspeicher gespeichert wird (genauer gesagt, die Zugriffsadresse des Heap-Speicherplatzes wird im Stapelspeicher gespeichert) und das Objekt spezifisch ist Inhalte wie AttributeName und Alter werden im Heap-Speicher gespeichert. Da das Per-Objekt nur instanziiert wurde und ihm kein bestimmter Wert zugewiesen wurde, verfügt es über Standardwerte. Der Standardwert von string ist null und der Standardwert von int type ist 0. Wie bereits erwähnt, muss der Heap-Speicherplatz mit dem Schlüsselwort new geöffnet werden.
Codebeispiel Demo2: Erstellung mehrerer Objekte
class Person { String name ; int age ; public void tell() { System.out.println("姓名:"+name+",年龄:"+age); } } public class Demo2 { public static void main(String[] args) { Person per1 = new Person() ; Person per2 = new Person() ; per1.name="张三" ; per1.age=30 ; per2.age=33 ; per1.tell(); per2.tell(); } }
Abbildung 1-2 Instanziieren Sie zwei Objekte
Schlüsselkonzepte: Klassen sind wie Arrays Referenztypen, die bedeuten, dass mehrere Stapelspeicher auf denselben Heapspeicher verweisen können.
Codebeispiel Demo3: Objektreferenzübertragung 1
class Person { String name ; int age ; public void tell() { System.out.println("姓名:"+name+",年龄:"+age); } } public class Demo3 { public static void main(String[] args) { Person per1 = new Person() ; Person per2 = per1 ;//-------注意-------- per1.name="张三" ; per1.age=30 ; per2.age=33 ; per1.tell(); per2.tell(); } }
Das Ergebnis der Programmausführung ist:
Aus dem laufenden Ergebnis des Programms geht hervor, dass der Ausgabeinhalt der beiden Objekte derselbe ist. Tatsächlich besteht die sogenannte Referenzübertragung darin, die Nutzungsrechte eines Heap-Speicherplatzes auf mehrere Stapelspeicherplätze zu übertragen Der Inhalt dieses Programms lautet wie folgt:
Abbildung 1-3 Übertragen Sie die Speicherzuordnung der Objektreferenz
Abbildung 1-3 Transferspeicherzuordnung der Objektreferenz (Fortsetzung)
Hinweis: Im obigen Beispiel hat das Objekt per2 Kein Heap-Speicherplatz. Dies liegt daran, dass das Objekt per2 nur Deklarationsoperationen und keine Instanziierungsoperationen ausführt. Verwenden Sie einfach das neue Schlüsselwort, und nach der Instanziierung ist Heap-Speicherplatz vorhanden
Codebeispiel Demo4: Objektreferenzübertragung 2
class Person { String name ; int age ; public void tell() { System.out.println("姓名:"+name+",年龄:"+age); } } public class Demo4 { public static void main(String[] args) { Person per1 = new Person() ; Person per2 = new Person() ; per1.name="张三" ; per1.age=30 ; per2.name="李四" ; per2.age=33 ; per2=per1 ;//-----注意---- per1.tell(); per2.tell(); } }
Das Ergebnis der obigen Ausführung Programm ist:
Anhand der Ausgabe des Programms können wir erkennen, dass es Demo3 ähnelt. Es sind jedoch einige Änderungen bei der Speicherzuweisung aufgetreten, wie unten gezeigt:
Abbildung 1-4 (Garbage Object) Generation
Hinweise:
1. Java selbst bietet einen Garbage-Collection-Mechanismus (Garbage Collection, GC), der von Zeit zu Zeit ungenutzten Speicherplatz freigibt, solange das Objekt nicht mehr verwendet wird , wird darauf gewartet, dass der GC den Speicherplatz freigibt, z. B. name="李思";age=33 im Heap-Speicher oben.
2. Ein Stapelspeicher kann nur auf einen Heap-Speicherplatz verweisen. Wenn Sie auf andere Heap-Speicherplätze verweisen möchten, müssen Sie zuerst den vorhandenen Zeiger trennen, bevor Sie einen neuen Zeiger zuweisen.
Gemeinsame Speicherbereiche in Java
In Java gibt es hauptsächlich 4 Speicherbereiche. Die Namen und Funktionen dieser Speicher sind wie folgt:
1 . Stapelspeicherplatz: Speichert die Namen aller Objekte.
2. Heap-Speicherplatz: Speichert den spezifischen Attributinhalt jedes Objekts.
3. Globaler Datenbereich: Statische Typattributwerte speichern.
4. Globaler Codebereich: Speichert alle Methodendefinitionen.
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Java-Speichermechanismus (Bilder und Text). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.
