RFR: 8251330: Reorder CDS archived heap to speed up relocation

Matias Saavedra Silva matsaave at openjdk.org
Thu Feb 22 17:12:04 UTC 2024


We should reorder the archived heap to segregate the objects that don't need marking. This will save space in the archive and improve start-up time

This patch reorders the archived heap to segregate the objects that don't need marking. The leading zeros present in the bitmaps thanks to the reordering can be easily removed, and this the size of the archive is reduced.

Given that the bitmaps are word aligned, some leading zeroes will remain.

Metrics, courtesy of @iklam :
```calculate_oopmap: objects = 15262 (507904 bytes, 332752 bytes don't need marking), embedded oops = 8408, nulls = 54
Oopmap = 15872 bytes

calculate_oopmap: objects = 4590 (335872 bytes, 178120 bytes don't need marking), embedded oops = 46487, nulls = 29019
Oopmap = 10496 bytes

(332752 + 178120) / (507904 + 335872.0) = 0.6054592688106796 
More than 60% of the space used by the archived heap doesn't need to be marked by the oopmap. 

$ java -Xshare:dump -Xlog:cds+map | grep lead
[3.777s][info][cds,map] - heap_oopmap_leading_zeros: 143286
[3.777s][info][cds,map] - heap_ptrmap_leading_zeros: 50713

So we can reduce the "bm" region by (143286 + 50713) / 8 = 24249 bytes.

Current output:
$ java -XX:+UseNewCode -Xshare:dump -Xlog:cds+map | grep lead 
[5.339s][info][cds,map] - heap_oopmap_leading_zeros:      26
[5.339s][info][cds,map] - heap_ptrmap_leading_zeros:      8

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

Commit messages:
 - Removed commented code
 - Adjusted word alignment in slice method
 - Merge branch 'master' into reorder_archive_heap_8251330
 - Merge branch 'master' into reorder_archive_heap_8251330
 - Fixed sorting of equal rank objs
 - Only set zeros once
 - Improved setting leading zeros
 - Merge branch 'master' into reorder_archive_heap_8251330
 - Initialized leading zeros
 - Merge branch 'master' into reorder_archive_heap_8251330
 - ... and 17 more: https://git.openjdk.org/jdk/compare/10beb318...bf759be8

Changes: https://git.openjdk.org/jdk/pull/17350/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=17350&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8251330
  Stats: 248 lines in 11 files changed: 217 ins; 8 del; 23 mod
  Patch: https://git.openjdk.org/jdk/pull/17350.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/17350/head:pull/17350

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


More information about the hotspot-dev mailing list