<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jep519 on Devops Monk</title><link>https://devops-monk.com/tags/jep519/</link><description>Recent content in Jep519 on Devops Monk</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 10 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://devops-monk.com/tags/jep519/index.xml" rel="self" type="application/rss+xml"/><item><title>Compact Object Headers (JEP 519): 33% Less Heap Overhead</title><link>https://devops-monk.com/tutorials/java25/compact-object-headers/</link><pubDate>Sun, 10 May 2026 00:00:00 +0000</pubDate><guid>https://devops-monk.com/tutorials/java25/compact-object-headers/</guid><description>What Is an Object Header? Every single Java object — every String, every Integer, every record, every array — carries a header that the JVM uses for bookkeeping. Your code never sees this header; it lives alongside the object&amp;rsquo;s fields in memory.
Before Java 25, on a 64-bit JVM, the header occupied 96 to 128 bits (12–16 bytes):
┌─────────────────────────────────────────────────────────┐ │ Mark Word (64 bits) │ │ ─ identity hash code │ │ ─ lock state (biased lock / thin lock / fat lock) │ │ ─ GC age bits │ ├─────────────────────────────────────────────────────────┤ │ Class Pointer (32 bits compressed / 64 bits full) │ │ ─ pointer to the object&amp;#39;s class (Klass* in HotSpot) │ └─────────────────────────────────────────────────────────┘ With UseCompressedOops (default), the class pointer is compressed to 32 bits, giving a 96-bit (12-byte) header.</description></item></channel></rss>