Heim  >  Artikel  >  Java  >  Speichertypen in Java

Speichertypen in Java

王林
王林Original
2024-08-30 15:17:29272Durchsuche

Der Speicherbereich der Java Virtual Machine ist ein Laufzeitbereich, der für die Ausführung verschiedener Programme verwendet wird, die während der Laufzeit einer Java-Anwendung beteiligt sind. Der Speicherbereich der JVM ist grob in fünf verschiedene Teile unterteilt: Methodenbereich, Heap-Bereich, Stapel, Programmzähler (PC)-Registerbereich und nativer Methodenbereich. In diesem Artikel besprechen wir die verschiedenen Speichertypen in Java.

WERBUNG Beliebter Kurs in dieser Kategorie JAVA MASTERY - Spezialisierung | 78 Kursreihe | 15 Probetests

Top 5 Speichertypen in Java

Wie wir wissen, ist Java eine objektorientierte Sprache; Daher werden alle in Java erstellten Objekte in der JVM (Java Virtual Machine) gespeichert. Der JVM-Speicher ist grundsätzlich in die folgenden Teile unterteilt:

1. Methodenbereich

Alle ausführenden Threads teilen sich diesen Teil des JVM-Speicherbereichs. Klassenelemente wie Konstantenpool, Klassenfelder, Konstruktorcodes, Methodencodes usw. Der Methodenbereich kann als Teil des Heap-Bereichs betrachtet werden, speichert jedoch nur Daten pro Klasse. Wir können sagen, dass der Methodenbereich für die Speicherung von Informationen auf Klassenebene verantwortlich ist.

2. Heap-Speicher

Heap-Speicher in Java wird von der Java-Laufzeit verwendet, um Objekten und Klassen während der Ausführung eines Java-Programms Speicher zuzuweisen. Immer wenn ein Objekt in Java erstellt wird, wird es im Heap-Speicher gespeichert. Ein Garbage-Collection-Prozess wird im Heap-Speicher ausgeführt, um unnötigen Speicherplatz freizugeben. Dabei werden durch die Garbage-Collection diejenigen Objekte aus dem Heap-Bereich entfernt, die keine Referenzen haben. Der Heapspeicher in Java ist in die folgenden Teile unterteilt:

  • Junge Generation: Dies ist der Teil, in dem alle neu erstellten Objekte platziert werden. Wenn dieser Teil des Java-Heaps voll ist, erfolgt eine kleine Speicherbereinigung, um Speicherplatz freizugeben.
  • Alte Generation: Alle Objekte, die nach einer geringfügigen Speicherbereinigung im Speicher verbleiben, werden in die alte Generation verschoben. Daher ist dies der Teil des Heap-Speichers, in dem langlebige Objekte vorhanden sind.
  • Permanente Generierung: Dieser Teil von JVM enthält native und statische Methoden, die Metadaten für die Ausführung von Java-Anwendungen bereitstellen.

Hier sind einige wichtige Punkte zum Java-Heapspeicher:

  • Wenn der Heap-Speicherplatz voll wird, wird von Java ein OutOfMemory-Fehler ausgegeben.
  • Der Zugriff auf den Heap-Speicher ist im Vergleich zum Stapelspeicher langsam.
  • Der Heap-Speicher ist im Vergleich zum Stapelspeicher viel größer.
  • Der Heap-Speicher ist nicht threadsicher, da er von allen Objekten gemeinsam genutzt wird.
  • Automatische Freigabe ist im Heap-Speicher nicht vorhanden, da ein Garbage Collector erforderlich ist, um Speicherplatz freizugeben.

3. Stapelspeicher

Wie der Name schon sagt, basiert der Stapelspeicher auf dem LIFO-Prinzip (Last In, First Out). Der Stapelspeicher wird für die statische Speicherzuweisung verwendet, und jeder ausgeführte Thread in einem Java-Programm verfügt über einen eigenen Stapelspeicher. Immer wenn eine Java-Methode aufgerufen wird, wird im Java-Stack-Speicher ein neuer Block erstellt, um lokale oder Zwischenvariablen und Verweise auf andere Objekte in der Methode zu speichern. Sobald die Ausführung der Methode abgeschlossen ist, wird der Speicherblock im Stapel leer und von der nächsten Methode verwendet. Die Größe des Stapelspeichers ist im Vergleich zum Heapspeicher geringer. Hier sind einige der wichtigen Funktionen des Stapelspeichers.

  • Der Stapelspeicher wächst und schrumpft, wenn neue Methoden zum Stapelspeicher hinzugefügt bzw. daraus entfernt werden.
  • Stapelspeicher wird automatisch zugewiesen und freigegeben, nachdem die Methode ihre Ausführung abgeschlossen hat.
  • Der Zugriff auf den Stapelspeicher ist im Vergleich zum Heap-Speicher schnell.
  • Immer wenn der Stapelspeicher voll ist, wird von Java eine Ausnahme namens Stapelüberlaufausnahme ausgelöst.
  • Der Stapelspeicher ist Thread-sicher, da jeder Thread über einen eigenen Stapelspeicher verfügt.

4. PC-Register

Die Hauptfunktion von PC-Registern besteht darin, die Adresse der aktuell ausgeführten Anweisung zu speichern. Außerdem wird die Adresse der Threads gespeichert, die für die Ausführung der aktuellen Anweisung verantwortlich sind. Der den PC-Registern zugewiesene Speicher ist sehr klein. Java-Anwendungen, die in JVM ausgeführt werden, haben keine Auswirkungen auf den PC-Registerspeicher oder seinen Inhalt.

5. Heimatgebiet

Dieser Bereich wird mit anderen Sprachen als Java implementiert. Bei der Erstellung neuer Threads wird in diesem Bereich für jeden erstellten Thread Speicher allokiert. Die Größe des nativen Bereichs kann fest oder dynamisch sein.

Beispiele für Speicher in Java

Jetzt sehen wir ein Java-Beispiel, das zeigt, wie Speicher zugewiesen wird:

Code:

package com.edubca.javademo;
class StudentData {
int rollNumber;
String name;
public StudentData(int rollNumber, String name) {
super();
this.rollNumber = rollNumber;
this.name = name;
}
public int getRollNumber() {
return rollNumber;
}
public void setRollNumber(int rollNumber) {
this.rollNumber = rollNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
int id = 11;
String name = "Yash";
StudentData s = null;
s = new StudentData(id, name);
System.out.println("Student Id is " + s.getRollNumber());
System.out.println("Student Name is " + s.getName());
}
}

Ausgabe:

Speichertypen in Java

Speicherzuweisung:

Jetzt werden wir sehen, wie der Speicher im obigen Programm zugewiesen wird:

  • In der Main-Klasse wird nach Eingabe der Main-Methode, da id und der Name lokale Variablen sind, auf folgende Weise ein Speicherplatz im Stapelspeicher erstellt:
    • Ganzzahlige IDs mit einem primitiven Wert werden im Stapelspeicher gespeichert.
    • Referenzen von StudentData-Objekten werden im Stapelspeicher gespeichert und verweisen auf das ursprüngliche StudentData-Objekt, das im Heap-Speicher gespeichert ist.
  • Der Aufruf des Klassenkonstruktors „StudentData“ wird außerdem oben im Stapelspeicher hinzugefügt. Gespeichert werden:
    • Referenz auf aufrufendes Objekt.
    • Ganzzahlige Variablen-ID mit dem Wert 11.
    • Referenz des Variablennamens vom Typ String, der auf ein tatsächliches Objekt verweist, das in einem String-Pool im Heap-Speicher gespeichert ist.
  • Zwei Instanzvariablen mit den Namen studentId und studentName, die in der StudentData-Klasse deklariert sind, werden im Heap-Speicher gespeichert.

Das obige ist der detaillierte Inhalt vonSpeichertypen in Java. 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
Vorheriger Artikel:Java-BereitstellungstoolsNächster Artikel:Java-Bereitstellungstools