Java 10: Heap auf alternativen Speicher (NV-DIMM) allozieren – JEP 316
JEP 316 – Heap Allocation on Alternative Memory Devices
Moderne Hardware bietet Non-Volatile DIMMs (NV-DIMM / Persistent Memory): byte-adressierbar, persistent, große Kapazität. Java 10 erlaubt, den Java-Heap auf solchen Geräten zu platzieren.
Neue VM-Option
-XX:AllocateHeapAt=<pfad>
Der Pfad zeigt auf ein Dateisystem, das das NV-DIMM-Gerät einbindet (z. B. /mnt/pmem oder ~/pmem/heap). Die VM führt ein mmap() auf diesen Pfad durch und nutzt den gemappten Bereich als Heap.
Beispiel
java -XX:AllocateHeapAt=/mnt/pmem/heap -Xms4g -Xmx4g -jar meineapp.jar
Weiterhin wirksame Heap-Flags
-Xms(Initial Heap Size)-Xmx(Max Heap Size)-XX:InitialHeapSize,-XX:MaxHeapSize
Die Größenangaben begrenzen den genutzten Bereich innerhalb des gemappten Speichers.
Anwendungsfälle
- In-Memory-Datenbanken / Caches: Riesige Heaps (TB-Bereich) ohne DRAM-Kosten.
- Schneller Neustart: Heap-Inhalt persistiert über JVM-Neustarts (wenn Applikation serialisiert/deserialisiert korrekt).
- Checkpoint/Restore: State eines laufenden Prozesses persistieren.
Voraussetzungen & Einschränkungen
- Betriebssystem & Dateisystem müssen
mmapmitMAP_SYNC/ DAX (Direct Access) unterstützen (Linux Kernel 4.15+, ext4/xfs mit DAX, Windows Server 2016+). - Nur für Heap; Metaspace, Thread Stacks, Code Cache bleiben im DRAM.
- GC-Verhalten auf persistentem Speicher kann andere Performance-Charakteristiken haben (Latenz, Bandbreite).
- Nicht für alle GC-Algorithmen gleichermaßen getestet (G1, Parallel GC funktionieren; ZGC/Shenandoah experimentell).
Zukunft
Java 11+ erweitert dies mit -XX:AllocateOldGenAt (getrennte Old-Gen-Platzierung) und besserer Integration in Project Panama (Foreign Memory Access API).
Java
- Dynamische Speicherallokation in C: malloc, calloc, realloc & free meistern
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java Kommentare: Typen, Verwendung und Best Practices
- Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
- Java Strings meistern: Erstellung, Methoden und Best Practices
- Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
- Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
- Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
- Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
- Java Vector verstehen: Verwendung, Funktionen und Vergleich mit ArrayList