8345293: Fix generational Shenandoah with compact headers

Reviewed-by: shade, stuefe, ysr
This commit is contained in:
Roman Kennke 2024-12-03 16:45:50 +00:00
parent e1910f2d19
commit e9f6ba0526

View File

@ -332,6 +332,11 @@ void ShenandoahHeap::increase_object_age(oop obj, uint additional_age) {
uint ShenandoahHeap::get_object_age(oop obj) {
markWord w = obj->mark();
assert(!w.is_marked(), "must not be forwarded");
if (UseObjectMonitorTable) {
assert(LockingMode == LM_LIGHTWEIGHT, "Must use LW locking, too");
assert(w.age() <= markWord::max_age, "Impossible!");
return w.age();
}
if (w.has_monitor()) {
w = w.monitor()->header();
} else if (w.is_being_inflated() || w.has_displaced_mark_helper()) {