Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Java Stack und Heap:Lernprogramm zur Java-Speicherzuweisung

Was ist Stapelspeicher?

Stack in Java ist ein Speicherabschnitt, der Methoden, lokale Variablen und Referenzvariablen enthält. Der Stapelspeicher wird immer in der Reihenfolge Last-In-First-Out referenziert. Lokale Variablen werden im Stack angelegt.

Was ist Heap-Speicher?

Heap ist ein Speicherabschnitt, der Objekte enthält und auch Referenzvariablen enthalten kann. Instanzvariablen werden im Heap erstellt

Speicherzuweisung in Java

Speicherzuweisung in Java ist der Prozess, bei dem die virtuellen Speicherabschnitte in einem Programm zum Speichern der Variablen und Instanzen von Strukturen und Klassen reserviert werden. Allerdings wird der Speicher bei der Deklaration keinem Objekt zugewiesen, sondern es wird nur eine Referenz erstellt. Für die Speicherzuweisung des Objekts wird die Methode new() verwendet, sodass dem Objekt immer Speicher auf dem Heap zugewiesen wird.

Die Java-Speicherzuweisung ist in folgende Abschnitte unterteilt:

  1. Haufen
  2. Stapeln
  3. Code
  4. Statisch

Diese Aufteilung des Speichers ist für seine effektive Verwaltung erforderlich.

Unterschied zwischen lokaler und Instanzvariable

Instanzvariable wird innerhalb einer Klasse, aber nicht innerhalb einer Methode deklariert

class Student{ 
int num; // num is  instance variable 
public void showData{}

Lokale Variable werden innerhalb deklariert eine Methode mit Methode Argumente .

public void sum(int a){

int x = int a +  3;

// a , x are local variables;

}

Unterschied zwischen Stack und Heap

Klicken Sie hier, wenn das Video nicht zugänglich ist

Nehmen wir ein Beispiel, um dies besser zu verstehen.

Bedenken Sie, dass Ihre Hauptmethode die Methode m1 aufruft

public void m1{
int x=20
}

Im Stack Java wird ein Frame aus der Methode m1 erstellt.

Die Variable X in m1 wird auch im Rahmen für m1 im Stack erstellt. (Siehe Bild unten).

Methode m1 ruft Methode m2 auf. Im Stack Java wird ein neuer Frame für m2 über dem Frame m1 erstellt.

Die Variablen b und c werden auch in einem Frame m2 in einem Stack erstellt.

public void m2(int b){
boolean c;
}

Dieselbe Methode m2 ruft Methode m3 auf. Wieder wird ein Frame m3 oben auf dem Stack erstellt (siehe Bild unten).

Nehmen wir nun an, unsere Methode m3 erstellt ein Objekt für die Klasse „Account“, die zwei Instanzen hat, die Variablen int p und int q.

Account {
             Int p;
             Int q;
       }

Hier ist der Code für die Methode m3

public void m3(){
	Account ref = new Account();
	// more code
}

Die Anweisung new Account() erstellt ein Kontoobjekt im Heap.

Die Referenzvariable „ref“ wird in einem Stack java.

erstellt

Der Zuweisungsoperator „=“ erstellt eine Referenzvariable, die auf das Objekt im Heap zeigt.

Sobald die Methode ihre Ausführung abgeschlossen hat. Der Steuerungsfluss geht zurück zur aufrufenden Methode. Was in diesem Fall die Methode m2 ist.

Der Stack von Methode m3 wird geleert.

Da die Referenzvariable nicht mehr auf das Objekt im Heap zeigt, wäre es für die Garbage Collection geeignet.

Sobald die Methode m2 ihre Ausführung abgeschlossen hat. Es wird aus dem Stack entfernt und alle seine Variablen werden geleert und stehen nicht mehr zur Verwendung zur Verfügung.

Ebenso für Methode m1.

Schließlich kehrt der Steuerungsfluss zum Startpunkt des Programms zurück. Was normalerweise die „Hauptmethode“ ist.

Was ist, wenn das Objekt eine Referenz als Instanzvariable hat?

public static void main(String args[]) {
  A parent = new A(); //more code } class A{ B child = new B(); int e; //more code } class B{ int c; int d;  //more code }

In diesem Fall wird die Referenzvariable „Kind“ im Heap erstellt, die wiederum auf ihr Objekt zeigt, etwa wie im folgenden Diagramm.

Zusammenfassung:


Java

  1. Java-Variablen und Literale
  2. Java-Klasse und -Objekte
  3. Abstrakte Java-Klasse und abstrakte Methoden
  4. Java verschachtelte und innere Klasse
  5. Java-Wurf und Würfe
  6. Java-Anmerkungstypen
  7. Java Autoboxing und Unboxing
  8. Java String replace(), replaceAll() und replaceFirst() Methode
  9. Java - Überschreiben
  10. Java 10 - Heap-Zuweisung