Java 10: Application Class-Data Sharing (AppCDS, JEP 310) – Schnellerer App-Start
Problem: Langsamer JVM-Start
Beim Start lädt die JVM tausende Klassen – bei Microservices/Serverless-Funktionen (Cold Start) ein messbarer Overhead. Class-Data Sharing (CDS) existiert seit Java 5, aber nur für Bootstrap-Klassen (rt.jar / JDK-Module).
JEP 310: Application Class-Data Sharing
Java 10 erweitert CDS auf Anwendungs-Klassen. Ein Shared Archive (.jsa) enthält Metadaten geladener Klassen und kann von mehreren JVM-Prozessen gemappt werden → reduzierte Startzeit & Memory Footprint.
3-Schritt-Prozess
1. Klassenliste erstellen (DumpLoadedClassList)
java -Xshare:off -XX:+UseAppCDS \
-XX:DumpLoadedClassList=meineapp.lst \
-cp meineapp.jar com.example.Main
Erzeugt meineapp.lst mit allen geladenen Klassen.
2. Shared Archive erzeugen (Xshare:dump)
java -Xshare:dump -XX:+UseAppCDS \
-XX:SharedClassListFile=meineapp.lst \
-XX:SharedArchiveFile=meineapp.jsa \
-cp meineapp.jar
Erzeugt meineapp.jsa (Memory-mapped Archive).
3. Archive nutzen (Xshare:on)
java -Xshare:on -XX:+UseAppCDS \
-XX:SharedArchiveFile=meineapp.jsa \
-cp meineapp.jar com.example.Main
Voraussetzungen & Hinweise
- Klassenpfad (
-cp) muss bei Dump & Nutzung identisch sein. - Archiv ist plattformspezifisch (OS, CPU, JDK-Build).
- Funktioniert mit Modulpfad (
--module-path) ebenso. - In Java 11+ vereinfacht:
java -Xshare:on -XX:SharedArchiveFile=...(UseAppCDS default). - Für Container: Archive beim Image-Build erzeugen, im Container nutzen.
Nutzen
- Startzeit-Reduktion typischerweise 10–30 % (abhängig von App-Größe).
- Gemeinsame Metadaten → weniger RSS (Resident Set Size) bei mehreren Instanzen.
- Ideal für Serverless, Microservices, CLI-Tools, häufig gestartete Prozesse.
Java
- 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 anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- 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