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.
Vorher hilfreich
Lerninhalt
Verstehen & anwenden
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.
javac Hallo.java
java Hallo
// Hallo.java -> Hallo.class (Bytecode) -> JVMHeap 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.
void demo() {
int zahl = 5; // Stack
Lernkarte karte = new Lernkarte(); // Referenz im Stack, Objekt im Heap
}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.
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.
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
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
Erkennen: Welcher Abschnitt passt?
Welcher Abschnitt passt zu diesen Begriffen?
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.
Fortschritt
Bereit zum Abschließen?
Markiere die Lektion als abgeschlossen, um XP und Streak zu erhalten.