RFR: 8376822: UseCompactObjectHeaders: fill Klass alignment gaps in AOT cache [v2]

Ioi Lam iklam at openjdk.org
Mon Feb 23 00:34:30 UTC 2026


> When  `UseCompactObjectHeaders` is enabled, `Klass` objects must be aligned by 1024 bytes. This leaves many gaps in the "rw" region of the AOT cache.
> 
> This PR manages the gaps using an `RBTree`. The gaps are sorted in ascending sizes. Gaps of the same size are sorted in ascending addresses. When allocating a small object, we try to find a suitable gap with the lowest address.
> 
> Because we have lots of small metaspace objects in the AOT cache, the gaps are always filled. We save abuot 5% of footprint with the JDK's default CDS archive (777KB out of 15.7MB):
> 
> 
> $ java -Xshare:dump -XX:+UseCompactObjectHeaders -Xlog:aot,aot+alloc=trace | grep -i gap | tail -2
> [0.407s][trace][aot,alloc] 8 bytes @ 0x716e804623f0 in a gap of 8 bytes (used gaps 10293 times, remain gap = 0 bytes in 0 blocks)
> [0.443s][info ][aot      ] Allocated 10293 objects of 777264 bytes in gaps
> $ ls -l images/jdk/lib/server/classes_coh.jsa 
> -rw-rw-r-- 1 iklam iklam 15704064 Feb 22 16:17 images/jdk/lib/server/classes_coh.jsa
> 
> 
> Related changes
> 
> - Address sorting added to AOTMapLogger
> - The null assertion in `ArchivePtrMarker::mark_pointer()` was wrong for the dynamic archive (`ptr_base()` points to the bottom of the dynamic archive, not the bottom of the AOT metaspace).

Ioi Lam has updated the pull request incrementally with one additional commit since the last revision:

  moved offset != 0 check

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/29869/files
  - new: https://git.openjdk.org/jdk/pull/29869/files/0ab369f1..f9f77d94

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=29869&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=29869&range=00-01

  Stats: 22 lines in 2 files changed: 10 ins; 12 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/29869.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/29869/head:pull/29869

PR: https://git.openjdk.org/jdk/pull/29869


More information about the hotspot-dev mailing list