Vertiefung der Programmierung

Speicherverwaltung

Exkurs: Speicherverwaltung

Bild ist gemeinfrei

Was sind Variablen?

?

Was sind primitive bzw.
nicht-primitive Datentypen?

?

Was sind Objekte?

?

Was sind Referenzen?

?

Aus Sicht vom Speicher: Was ist der Unterschied zwischen einer Klasse und einem Objekt?

?

Speicherverbrauch

public class Circle {
    private float x;
    private float y;
    private float radius;

    public Circle(float xc, float yc, float r) {
        this.x = xc;
        this.y = yc;
        this.radius = r;
    }
}

Wie viel Speicher
braucht ein
Circle-Objekt?

pencil

live

Speicherorganisation

Stack
(=Stapelspeicher)

Heap
(=Haldenspeicher)

  • lokale Variablen
  • Rückgabewerte
  • Parameter (für Methoden)
  • Objekte
  • Compiler reserviert
    und gibt Speicher frei
  • Entwickler:in reserviert
  • Garbage Collector gibt frei

Wo?

Wofür?

Wer?

Speicherorganisation (am Beispiel)

Tafel!

Speicherverbrauch und Vererbung 

class Shape {
	protected float x;
	protected float y;
	
    Shape(float xc, float yc) {
		this.x = xc;
		this.y = yc;
	}
}
class Circle extends Shape {
	private float radius;
    
	Circle(float xc, float yc, float r) {
		super(xc, yc);
    	this.radius = r;
    }
}

(2) Wie viel braucht Circle?

 

(1) Wie viel braucht Shape?

Zusammenfassung

  • Primitive Datentypen (int, char, …) brauchen Speicher   ➔ auf dem Stack

  • Objekte brauchen auch Speicher
    auf dem Heap

  • Referenzen selbst brauchen keinen Speicher
    nur die Objekte, auf die sie zeigen

  • Keine Referenz zeigt mehr auf ein Objekt:
    Objekt wird vom Garbage Collector entsorgt

Speicherverwaltung

By blackbill

Speicherverwaltung

  • 51