Java 10: Thread-Local Handshakes (JEP 312) – Schnellere VM-Safepoints
JEP 312 – Thread-Local Handshakes
Hintergrund: Globale Safepoints
Die HotSpot VM nutzt globale Safepoints, um alle Application-Threads anzuhalten (z. B. für GC, Deoptimierung, Biased Locking Revocation). Alle Threads müssen an einem sicheren Punkt anhalten – das kostet Zeit und skaliert schlecht bei vielen Cores/Threads.
Lösung: Thread-Local Handshakes
Java 10 führt Thread-Local Handshakes ein: Die VM kann einen einzelnen Thread anhalten und einen Callback ausführen, ohne alle anderen Threads zu stoppen.
- Neue VM-Option:
-XX:+ThreadLocalHandshakes(Standard:onauf unterstützten Plattformen). - Funktioniert auf x64 (Intel/AMD) und SPARC.
- Andere Plattformen fallen auf klassische globale Safepoints zurück.
Wie es funktioniert
- VM fordert Handshake für Thread T an.
- Thread T erreicht nächsten Safepoint-Poll (bereits vorhanden für GC).
- Thread T führt den Handshake-Callback aus (z. B. Stack-Walk, Deopt-Check).
- Thread T läuft sofort weiter – keine anderen Threads betroffen.
Vorteile
- Reduzierte Stop-the-World-Zeiten für Operationen, die nur einzelne Threads betreffen.
- Bessere Skalierbarkeit auf Many-Core-Systemen (64+ Cores).
- Feinere Kontrolle für VM-Interna (z. B. Biased Locking Revocation, Thread-Dump, JFR Events).
Einschränkungen
- Nur x64 & SPARC (Hardware-Support für effiziente Polling-Sequenzen nötig).
- Nicht alle Safepoint-Operationen sind darauf umgestellt (GC bleibt global).
- Experimentell in Java 10, stabiler in Java 11+.
Verwandte Optionen
-XX:+ThreadLocalHandshakes # Aktivieren (Default auf x64/SPARC)
-XX:-ThreadLocalHandshakes # Deaktivieren
-XX:ThreadLocalHandshakePollingInterval=... # Polling-Intervall (Experten)
Fazit
Thread-Local Handshakes sind eine VM-interne Optimierung, die besonders bei hochparallelen Workloads (viele Threads, viele Cores) Latenzspitzen reduziert. Für Anwendungsentwickler transparent – kein Code-Change nötig.
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