{"id":632,"date":"2025-12-05T22:52:32","date_gmt":"2025-12-05T21:52:32","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=632"},"modified":"2025-12-18T22:53:49","modified_gmt":"2025-12-18T21:53:49","slug":"jep-519-kompakte-objekt-header-in-java-25","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=632","title":{"rendered":"JEP 519 \u2013 Kompakte Objekt-Header in Java 25"},"content":{"rendered":"\n<p>Mit der Ver\u00f6ffentlichung von <strong>Java 25 (JDK 25)<\/strong> ist ein lang erwartetes Feature endg\u00fcltig in den Produktstatus \u00fcberf\u00fchrt worden: <strong>Compact Object Headers<\/strong>, vorgestellt als <strong>JEP 519<\/strong>. Diese Neuerung zielt auf einen der fundamentalen Aspekte der Java-Laufzeit \u2013 den Speicher-Overhead von Objekten \u2013 und bietet signifikante Verbesserungen hinsichtlich Effizienz und Performance moderner Java-Anwendungen. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Warum kompakte Objekt-Header?<\/strong><\/h3>\n\n\n\n<p>Jedes Objekt in Java besitzt einen kleinen Bereich im Speicher, den sogenannten <strong>Objekt-Header<\/strong>. Dieser Header enth\u00e4lt grundlegende Metadaten wie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>eine Markierungsstruktur (Mark Word), z. B. Identit\u00e4tshashcode, GC-Alter und Lock-Status,<\/li>\n\n\n\n<li>und einen Verweis auf die Klasseninformationen (Class Word).<\/li>\n<\/ul>\n\n\n\n<p>In bisherigen JVM-Versionen war dieser Header \u00fcblicherweise <strong>96 Bits (12 Byte)<\/strong> gro\u00df \u2013 oder sogar <strong>128 Bits (16 Byte)<\/strong>, wenn <strong>Compressed Class Pointers<\/strong> deaktiviert waren. Diese Gr\u00f6\u00dfe macht bei vielen kleinen Objekten einen nicht unerheblichen Anteil des gesamten Heap-Speichers aus.<\/p>\n\n\n\n<p>Gerade in modernen Cloud-Umgebungen oder Microservices-Architekturen kann dieser Overhead sp\u00fcrbar werden, da viele kleine Objekte erzeugt werden. Hier setzt JEP 519 an.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Was \u00e4ndert JEP 519?<\/strong><\/h3>\n\n\n\n<p>Mit <strong>Compact Object Headers<\/strong> wird der Objekt-Header auf <strong>64 Bits (8 Byte)<\/strong> reduziert, indem Mark Word und Class Word effizienter zusammengef\u00fchrt und komprimiert werden. Die wichtigsten Punkte sind:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Reduktion des Headers von 96\/128 Bits auf 64 Bits<\/strong> \u2013 das spart Speicherplatz und verbessert die Cache-Nutzung.<\/li>\n\n\n\n<li>Die Komprimierung erreicht dies durch eine Reduktion der ben\u00f6tigten Bits f\u00fcr den Klassen-Pointer (Class Pointer) und die geschickte Neustrukturierung der Metadaten.<\/li>\n\n\n\n<li>Das Feature ist <strong>nicht standardm\u00e4\u00dfig aktiviert<\/strong>, kann jedoch mit der JVM-Option aktiviert werden:<code>java -XX:+UseCompactObjectHeaders ... <\/code>Die fr\u00fcher erforderliche Option <code>-XX:+UnlockExperimentalVMOptions<\/code> entf\u00e4llt nun.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Technische Details und Wirkungsweise<\/strong><\/h3>\n\n\n\n<p>Bei der neuen Implementierung werden <strong>Mark Word und Class Word<\/strong> in einen einzigen 64 Bit-Header integriert. Dabei werden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>der Klassenzugriffspointer weiter auf etwa <strong>22 Bit komprimiert<\/strong>,<\/li>\n\n\n\n<li>der Identit\u00e4ts-Hashcode und das GC-Alter beibehalten,<\/li>\n\n\n\n<li>zus\u00e4tzliche Bits f\u00fcr interne JVM-Zwecke (z. B. GC-Selbstverweis) ber\u00fccksichtigt. <\/li>\n<\/ul>\n\n\n\n<p>Dadurch w\u00e4chst die Menge der gespeicherten Objekt-Metadaten nicht, aber der Speicherbedarf jedes Objekts sinkt \u2013 insbesondere wenn viele kleine Objekte genutzt werden.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Performance-Vorteile in der Praxis<\/strong><\/h3>\n\n\n\n<p>Durch die Reduktion des Speicher-Overheads ergeben sich mehrere messbare Vorteile:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Geringerer Heap-Verbrauch<\/strong>, der laut Benchmarks im Bereich von etwa <strong>20 \u2013 22 %<\/strong> liegen kann. <\/li>\n\n\n\n<li><strong>Weniger GC-Druck<\/strong>, da weniger Speicher benutzt wird und die Garbage-Collector-Zyklen seltener ausgef\u00fchrt werden m\u00fcssen.<\/li>\n\n\n\n<li><strong>Verbesserte Performance<\/strong>, z. B. bis zu <strong>8 % geringere CPU-Zeit<\/strong> in manchen Workloads und <strong>10 % schnellere JSON-Verarbeitung<\/strong> in Benchmark-Szenarien.<\/li>\n\n\n\n<li><strong>Bessere Cache-Lokalit\u00e4t<\/strong> \u2013 kleinere Objekte passen besser in CPU-Caches, was die Prozessor-Effizienz steigert.<\/li>\n<\/ul>\n\n\n\n<p>Diese Effekte sind besonders relevant f\u00fcr <strong>Cloud-Deployments<\/strong>, <strong>Serverless-Umgebungen<\/strong> oder <strong>Microservices<\/strong>, die oft durch hohe Objekt-Erzeugungsraten gekennzeichnet sind.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Einsatzszenarien und Aktivierung<\/strong><\/h3>\n\n\n\n<p>Die Aktivierung von Compact Object Headers erfordert keine Code-\u00c4nderungen. Entwickler aktivieren das Feature einfach beim Start der JVM:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">java<\/span> <span class=\"hljs-selector-tag\">-XX<\/span><span class=\"hljs-selector-pseudo\">:+UseCompactObjectHeaders<\/span> <span class=\"hljs-selector-tag\">-jar<\/span> <span class=\"hljs-selector-tag\">meineApp<\/span><span class=\"hljs-selector-class\">.jar<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Da die Funktion aktuell noch nicht standardm\u00e4\u00dfig aktiviert ist, empfiehlt es sich, umfangreiche Performance-Tests durchzuf\u00fchren, bevor man sie in produktive Umgebungen \u00fcbernimmt. Diverse Anwender berichten, dass manche Workloads unterschiedliche Auswirkungen zeigen k\u00f6nnen, und die JVM-Entwickler planen, das Feature in zuk\u00fcnftigen Releases eventuell auch standardm\u00e4\u00dfig zu schalten. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Projekt Lilliput: Ein Blick in die Zukunft<\/strong><\/h3>\n\n\n\n<p>JEP 519 ist Teil von <strong>Project Lilliput<\/strong>, einer l\u00e4ngerfristigen Initiative im OpenJDK-Projekt mit dem Ziel, den Speicher-Overhead von Objekten in der JVM drastisch zu reduzieren. Der Weg begann mit Vorarbeiten wie der Unterst\u00fctzung f\u00fcr kompakte Monitore und experimentellen Features in Java 24 (JEP 450) und m\u00fcndet nun in der finalen Integration in Java 25.<\/p>\n\n\n\n<p>Langfristige Ideen aus Project Lilliput sehen sogar <strong>weitere Reduktionen des Objekt-Headers<\/strong> vor, eventuell bis auf 32-Bit-Strukturen, sowie weitere Optimierungen, die \u00fcber die reine Header-Komprimierung hinausgehen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Fazit<\/strong><\/h3>\n\n\n\n<p>Mit <strong>JEP 519 (\u201eCompact Object Headers\u201c) in Java 25<\/strong> erh\u00e4lt die JVM eine elegante und leistungsstarke Optimierung, die:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>den Speicherverbrauch reduziert,<\/li>\n\n\n\n<li>die Garbage-Collector-Performance verbessert,<\/li>\n\n\n\n<li>und in vielen realen Anwendungen zu sp\u00fcrbaren Effizienzgewinnen f\u00fchren kann.<\/li>\n<\/ul>\n\n\n\n<p>Da die Aktivierung einfach \u00fcber eine JVM-Option m\u00f6glich ist und keine Code-\u00c4nderungen verlangt, sollten Entwickler diesen Hebel ausprobieren \u2013 insbesondere bei speicherintensiven Anwendungen. Gleichzeitig bleibt abzuwarten, ob zuk\u00fcnftige Java-Versionen dieses Feature zur Standardoption machen, sobald es sich weiter bew\u00e4hrt hat.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mit der Ver\u00f6ffentlichung von Java 25 (JDK 25) ist ein lang erwartetes Feature endg\u00fcltig in den Produktstatus \u00fcberf\u00fchrt worden: Compact Object Headers, vorgestellt als JEP 519. Diese Neuerung zielt auf einen der fundamentalen Aspekte der Java-Laufzeit \u2013 den Speicher-Overhead von Objekten \u2013 und bietet signifikante Verbesserungen hinsichtlich Effizienz und Performance moderner Java-Anwendungen. Warum kompakte Objekt-Header? [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-632","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/632","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=632"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/632\/revisions"}],"predecessor-version":[{"id":633,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/632\/revisions\/633"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}