Die Speicherarchitektur der JVM verstehen

Codeoptimierung in Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

Was ist die JVM?

  • Plattformunabhängige Ausführungsumgebung
  • Wandelt Bytecode (.class) in Maschinencode um
  • Speicherverwaltung und Garbage Collection
  • Just-in-Time-Kompilierung
Codeoptimierung in Java

Überblick: JVM-Speicherarchitektur

Die Speicherarchitektur der JVM

Codeoptimierung in Java

Stack-Speicher

  • Speicherbereich für Methodenausführung und lokale Variablen
  • LIFO-Struktur (Last-In-First-Out)
  • Speichert:
    • Lokale Variablen
    • Primitive Datentypen
    • Methodenaufruf-Informationen
  • StackOverflowError, wenn Größe überschritten wird
Codeoptimierung in Java

Heap-Speicher

  • Speichert alle Objekte und Arrays
  • new erzeugt ein Objekt und legt es im Heap ab
  • Vom Garbage Collector verwaltet
  • Dynamische Größe
  • In Generationen unterteilt
Codeoptimierung in Java

Speicher in Aktion

public void processData() {
    int count = 0;                  // Stack

String name = "Java"; // Heap
List<String> items = // Referenz im Stack new ArrayList<>(); // Objekt im Heap
items.add(new String("Item")); // Objekt im Heap }
Codeoptimierung in Java

Speichereffiziente Kodiermuster

// Ineffizient
List<String> list1 = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    String s = new String("value"); // 1000 Objekte
    list1.add(s);
}

// Besser
List<String> list2 = new ArrayList<>();
String s = "value";  // Ein einzelnes Objekt
for (int i = 0; i < 1000; i++) {
    list2.add(s);
}
Codeoptimierung in Java

Zusammenfassung

  • Die JVM verwaltet Speicher vor allem über Stack- und Heap-Bereiche
  • Stack-Speicher -> schnell, speichert Primitive und Referenzen
  • Heap-Speicher -> speichert Objekte
Codeoptimierung in Java

Lass uns üben!

Codeoptimierung in Java

Preparing Video For Download...