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