HeadlinesBriefing favicon HeadlinesBriefing.com

JDK 28: Wertklassen-Optimierungen (JEP 401)

Hacker News •
×

Dieser Beitrag diskutiert Vorschau-Funktionen in JDK 28, insbesondere JEP 401, einen wichtigen Valhalla-Meilenstein, der als Vorschau-Funktion integriert wurde. Wertklassen erhöhen die Fähigkeit, Programmsemantik und der JVM verfügbare Optimierungsmöglichkeiten zu kommunizieren. Der Glaube jedoch, dass gewöhnliche Klassen eine Leistungsuntergrenze bieten und Wertklassen nicht darunter fallen können, ist unbegründet.

Ein gut gemeintes Programm kann die JVM zwingen, bei der Interaktion von Methoden zwischen abgeflachten und Referenz-Darstellungen zu konvertieren, was die Vorteile aufheben kann. Der Hauptoptimierungsvorteil von Wertklassen besteht darin, auf Identität zu verzichten, was der Laufzeitumgebung ermöglicht, geeignete Darstellungen zu wählen, Werte abzuflachen, um Pointer-Chasing zu vermeiden, und Komponenten in Registern oder auf dem Stack zu skalarisieren. Escape-Analyse wird ohne die Identitätsanforderung trivial.

Unveränderlichkeit ermöglicht Abflachung; JEP 539, Strenge Feldinitialisierung, lässt die JVM darauf vertrauen, dass ein finales Feld initialisiert wird, bevor sein umgebendes Objekt beobachtbar wird. Da ein solches Feld später nicht aktualisiert werden kann, kann die JVM ein nicht-atomares abgeflachtes Layout verwenden, ohne ein zerrissenes Assignment zu riskieren. Veränderliche Felder müssen tear-freie Assignment bewahren.

Wenn ein veränderliches Feld einen Wert enthält, der für ein atomares abgeflachtes Update zu groß ist, muss die JVM ein Referenz-Layout verwenden. Betrachten Sie einen Four-Longs-Record mit 32 Bytes Payload; zu groß für ein atomares abgeflachtes Update. Aber in einem Envelope-Record ist die Payload ein streng initialisiertes finales Feld, was ein nicht-atomares abgeflachtes Layout erlaubt.

Wäre Envelope veränderlich, fiele das Layout auf REGULAR zurück, um Konsistenz zu wahren.