Zum Inhalt springen
Lektion 25 von 26 15 Min. Profi Zur Übung Mit Codebeispiel

JVM & Speicher

Die Java Virtual Machine führt deinen Bytecode aus. Heap, Stack und Garbage Collector klingen kompliziert, sind aber im Kern gut vorstellbar.

Ansicht

01

Verstehen

Lies die Kernidee und das Beispiel.

02

Prüfen

Beantworte die Aktiv-Checks.

03

Anwenden

Setze die Transferaufgabe um.

Mini-Erfolg

Du kannst erklären, warum eine lokale Variable anders lebt als ein Objekt.

Warum das wichtig ist: Wenn du verstehst, was die JVM tut, verlierst du die Angst vor Begriffen wie Heap, Stack und Garbage Collector.

Das darf schwer sein

Das ist Profi-Stoff. Niemand erwartet, dass du das beim ersten Durchlauf beherrschst. Verstehen und Ausprobieren reicht.

Lerninhalt

Verstehen & anwenden

1

Compile once, run anywhere

javac übersetzt .java-Dateien in .class-Dateien mit Bytecode.

Die JVM führt diesen Bytecode auf jedem Betriebssystem aus.

Deshalb brauchst du für Windows, Linux und macOS nicht drei verschiedene Programme — nur eine passende JVM.

JVMBytecodejavac
Von der Datei zum Programm
javac Hallo.java
java Hallo

// Hallo.java  ->  Hallo.class (Bytecode)  ->  JVM
2

Heap und Stack

Der Stack speichert Methodenaufrufe und lokale Variablen.

Er ist klein, schnell und pro Thread vorhanden.

Der Heap enthält Objekte. Er ist größer und wird von allen Threads geteilt. Eine Referenz im Stack zeigt auf ein Objekt im Heap.

HeapStackReferenz
Wo liegt was?
void demo() {
    int zahl = 5;                 // Stack
    Lernkarte karte = new Lernkarte(); // Referenz im Stack, Objekt im Heap
}
3

Garbage Collector

Der Garbage Collector findet Objekte, die von keiner Referenz mehr erreicht werden, und gibt ihren Speicher frei.

Du musst in Java selten selbst aufräumen. Wichtig ist: Eine Referenz zu lange festhalten kann Speicher unnötig belegen.

Garbage CollectorGCMemory Leak
Unreachable werden
for (int i = 0; i < 1_000_000; i++) {
    String text = "Objekt " + i;
    // nach der Runde ist text nicht mehr erreichbar
}
// Der GC kann den Speicher später freigeben.

Vertiefung

Heap, Stack und GC

Der Stack gehört zu einem Thread und enthält Methodenaufrufe sowie lokale Variablen. Der Heap enthält Objekte und wird von allen Threads geteilt. Eine Referenz im Stack zeigt auf ein Objekt im Heap.

Der Garbage Collector räumt Objekte ab, die nicht mehr erreichbar sind. Ein „Memory Leak“ in Java entsteht meist dadurch, dass eine Referenz zu lange gehalten wird, zum Beispiel in einer statischen Liste.

Erreichbarkeit
void demo() {
    int zahl = 5;                 // Stack
    var karte = new Lernkarte();  // Referenz Stack, Objekt Heap
} // karte wird unreachable

static final List<byte[]> CACHE = new ArrayList<>();
// Dieser Cache wächst und wird nie geleert -> potenzielles Leak.

Merksatz: Der Stack lebt mit dem Thread, der Heap mit dem Programm. Der GC räumt nur, was nicht mehr erreichbar ist.

Übungsaufgabe

Speicher-Experiment

Erzeuge viele Objekte in einer Schleife und beobachte, wie der Speicher wächst. Erkläre anschließend, warum der GC aufräumen kann.

Das soll dein Programm können

  • Schleife mit mindestens 100.000 Objekten
  • Objekte werden nach der Runde nicht mehr referenziert
  • Beobachtung notieren (z. B. Task-Manager)
  • Heap und Stack in eigenen Worten erklären

Schreibe den Code hier oder in deiner IDE und vergleiche ihn dann mit der Lösung.

Dein Code wird automatisch auf diesem Gerät gespeichert.

Hinweis anzeigen

Ein einfaches String text = "Objekt " + i; reicht. Wichtig ist, dass die Referenz nach der Runde nicht außerhalb der Schleife gespeichert wird.

Lösung anzeigen
Speicher-Experiment.java
public class Speicher {
    public static void main(String[] args) {
        for (int i = 0; i < 100_000; i++) {
            String text = "Objekt " + i;
            if (i % 10_000 == 0) {
                System.out.println(text);
            }
        }
        System.out.println("Fertig. Die meisten Objekte sind jetzt unreachable.");
    }
}

Warum funktioniert das?

Nach jeder Runde ist die lokale Referenz text nicht mehr erreichbar. Der GC kann die Objekte entfernen, wenn er Speicher braucht. Würdest du alle Objekte in einer statischen Liste sammeln, blieben sie erreichbar.

Aktiv-Check

Teste dein Verständnis

1/6

Erkennen: Welcher Abschnitt passt?

Welcher Abschnitt passt zu diesen Begriffen?

JVMBytecodejavac
Tipp: Erst erinnern, dann prüfen. Fehler sind Teil des Lernens.

Spaßprojekt

Speicher beobachten

Erzeuge viele Objekte in einer Schleife und beobachte im Task-Manager oder mit jconsole, wie der Speicher wächst und wieder freigegeben wird.

Selbstcheck

Kann ich das schon?

Hake ab, was du wirklich erklären oder selbst bauen könntest.

0 von 3 geschafft

Fortschritt

Bereit zum Abschließen?

Markiere die Lektion als abgeschlossen, um XP und Streak zu erhalten.

</> Learn-Program © 2026 · Lizenziert unter CC BY-NC-SA 4.0

Rechtliches & Lizenz