[Java-Entwicklung] Java-Speicher

zunaechst

jedermann. Hallo!

Es sind 254 cm Dream Hanks.

Diesmal wurde es in den bisherigen Java-Artikeln nach und nach erwähnt

Ich werde leicht mit dem Speicher umgehen, den ich nicht behandelt habe.

Die Zusammenfassung der Java-Artikel finden Sie hier.

JVM

Bevor wir über Speicher sprechen, müssen wir wissen, was eine JVM ist.

JVM ist eine Abkürzung für "** Java Virtual Machine **" und führt Java-Programme tatsächlich aus.

Die JVM kann Java-Programme unabhängig von der CPU oder dem Betriebssystem ausführen.

Einige der JVMs sind Class Loader, Execution Engine, Garbage Collector, Laufzeitdatenbereich usw.

Obwohl es konfiguriert ist, werden diesmal nur "** Garbage Collector " und " Runtime Data Area **" behandelt.

Garbage Collector

Garbage Collector ist für die Verwaltung des Speichers der JVM verantwortlich.

Garbage Collector entfernt den Speicher von Objekten, die nicht mehr verwendet werden.

Runtime Data Area

Der Laufzeitdatenbereich ist der Bereich, in dem die tatsächlichen Daten gespeichert werden, wenn das Java-Programm sie ausführt.

Dieser Bereich ist grob in einen Methodenbereich, einen Heap-Bereich, einen Stapelbereich, einen PC-Resister-Bereich und einen nativen Methodenstapelbereich unterteilt.

Dieses Mal werden wir uns nur mit den Bereichen Methode, Heap und Stapel befassen.

Methodenbereich

Der Methodenbereich ist eine Sammlung von Klasseninformationen.

Feldinformationen, wie z. B. Namen von Klassenfeldvariablen, Datentypen, Zugriffssteuerungsinformationen,

Methodeninformationen wie Methodenname, Rückgabedatentyp, Argumente, Zugriffssteuerungen,

Bereich, in dem statische Variablen, endgültige Klassenvariablen usw. gespeichert sind.

Hier wird statischen Variablen Speicher zugewiesen, wenn die JVM ein Java-Programm ausführt.

Der Speicher wird freigegeben, wenn das Programm endet.

So können statische Variablen überall verwendet werden, da sie während der Ausführung des Programms generiert bleiben.

Haufenbereich

Der Heap-Bereich ist ebenfalls in mehrere Bereiche unterteilt, aber dieses Mal werde ich ihn ignorieren.

Der Heap-Bereich ist der Bereich, in dem die Daten von Objekten und Arrays gespeichert werden, die von new erstellt wurden.

Stichprobe

public class ExampleCalss {
	public static void main(String[] args) {
		Human human = new Human();
	}
}

class Human {
	int age;
	String name;
}

Informationen zu den Feldern der Klasse werden im Bereich Methode gespeichert.

Wenn Sie den Klassenkonstruktor mit new aufrufen, wird eine Instanz erstellt und im Heap-Bereich gespeichert.

Zu diesem Zeitpunkt wird den Feldern jeder Instanz Speicher zugewiesen und Werte können zugewiesen werden.

Und die Human-Klassenvariable "** human **" speichert die Adresse dieser Instanz. 20200929 Heap 영역 첨부자료1.png

Die Rolle des Garbage Collector im Heap-Bereich

Garbage Collector löscht den Speicherplatz, auf den sich niemand bezieht.

Stichprobe

public class ExampleCalss {
	public static void main(String[] args) {![20200929 Heap 영역 첨부자료2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/708649/f85e9c28-dbe5-db5d-edd1-6a75a4b54065.png)

		Human human = new Human();
		human = null;
		human = new Human();
	}
}

class Human {
	int age;
	String name;
}

Im obigen Beispiel ist die Speicheradresse, auf die der Mensch zeigt, null.

Und lassen Sie den Menschen eine neue Instanz erstellen und darauf verweisen.

Das heißt, niemand verweist auf die erste zugewiesene Instanz.

Ein solcher Speicherplatz (erste Instanz) ist das Ziel der Garbage Collection.

image.png

Stapelbereich

In diesem Bereich werden Daten wie lokale Variablen, Argumente und Rückgabewerte gespeichert.

Im Stapelbereich speichern grundlegende Typvariablen Variablen und ihre Daten zusammen.

Der Referenztyp (Objekt) speichert nur die Adresse der Instanz, und die tatsächlichen Daten werden im Heap-Bereich gespeichert.

Der Stapelbereich wird bei jedem Aufruf einer Methode einzeln erstellt.

Stichprobe

public class ExampleCalss {
	public static void main(String[] args) {
		int age = 10;
		age = mutiply(age, 4);
	}
	
	static int mutiply(int num1, int num2) {
		int result = num1*num2;
		return result;
	}
}

Die obigen Fälle der Reihe nach erklären (Argumente ignorieren)

(1) Der Stapelbereich der Hauptmethode wird erzeugt.

image.png

② Alter wird bei 10 generiert und initialisiert.

image.png

(3) Die Multiplikationsmethode wird ausgeführt und der Stapelbereich wird erzeugt.

image.png

(4) Das Multiplikationsargument wird generiert und mit dem übergebenen Wert initialisiert.

image.png

(5) Wert wird erzeugt und das Ergebnis der Operation wird ersetzt.

image.png

⑥ Die Rückgabe wird ausgeführt und die Mehrfachausführung ist abgeschlossen. Und die beim Multiplizieren verwendeten Variablen werden im Stapel gelöscht.

image.png

(7) Das Ausführungsergebnis der Multiplikationsmethode wird dem Alter zugeordnet.

image.png

⑧ Die Hauptmethode wird beendet und die in der Hauptmethode verwendeten Variablen werden gelöscht.

Am Ende

Das ist alles für diesen Artikel.

Danke für Ihren Besuch.

Recommended Posts

[Java-Entwicklung] Java-Speicher
Java-Entwicklungstraining
Java-Entwicklungsumgebung
Memo zur Java-Entwicklungsumgebung
Zusammenfassung des Java-Entwicklungslinks
Java Entwicklungsumgebung Konstruktion
[Entwicklung] Java Framework Vergleich
Modern Java Development Guide (Ausgabe 2018)
Java Development Basics-Practice ③ Fortgeschrittene Programmierung-
Java-Entwicklungsumgebung (Mac, Eclipse)
Java
Erste Java-Entwicklung in Eclipse
Grundlagen der Java-Entwicklung ~ Übung (Array) ~
Java
[Eclipse Java] Memo zum Einstellen der Entwicklungsumgebung
Bereiten Sie die Java-Entwicklungsumgebung mit Atom vor
Erstellung der Play Framework 2.6 (Java) -Entwicklungsumgebung
Informationen zur aktuellen Entwicklungsumgebung (Java 8)
Erstellen einer Java-Entwicklungsumgebung (für Mac)
Messen des Instanznutzungsspeichers in Java
HTML5-Entwicklung von Java mit TeaVM
Java-Entwicklungsumgebung (Mac, VS Code)
Installieren Sie die Java-Entwicklungsumgebung auf dem Mac
Java lernen (0)
[Java] -Array
Java geschützt
Bereiten Sie die Java-Entwicklungsumgebung mit VS Code vor
[Java] Modul
Java-Array
Java studieren ―― 9
Java Scratch Scratch
Java-Tipps, Tipps
Java-Methoden
Java-Methode
Java-Array
[Java] ArrayDeque
Java (Methode)
Java Day 2018
Java-Zeichenfolge
[Java Spring MVC] Entwicklungsbestätigungscontroller
Speichermessung für Java-Apps mit jstat
Untersuchen Sie die Speichernutzung von Java-Elementen
Java (Array)
Java statisch
Java-Serialisierung
Java Anfänger 4
JAVA hat bezahlt
Java studieren ―― 4
Java (gesetzt)
Java-Shell-Sortierung
[Java] compareTo
Java studieren -5
Java reflektierend 获 获 举
Java (Schnittstelle)
Java-Memorandum
Konstruktionsnotiz für die Java-Entwicklungsumgebung auf dem Mac
Java-Array
Java studieren ―― 1
[Java] Array
[Java] Polymorphismus