Details
-
Bug
-
Resolution: Fixed
-
P4
-
None
-
repo-shenandoah
Description
After Shenandoah completes final marking, it will immediately reclaim any regions with no live objects. If unmarked (dead) objects in old regions hold pointers into these reclaimed regions, they must be "coalesced and filled" to prevent the remembered set scan from attempting to iterate oops over reclaimed memory.
The bug here is that when a concurrent global cycle reclaims enough memory from regions with no live objects, it will skip the evacuation phases. In such cases, the cycle is essential complete (at least, it cannot be interrupted) after it finishes the early cleanup. In such cases it _must_ coalesce and fill dead objects in old regions after the early cleanup phase.
The bug here is that when a concurrent global cycle reclaims enough memory from regions with no live objects, it will skip the evacuation phases. In such cases, the cycle is essential complete (at least, it cannot be interrupted) after it finishes the early cleanup. In such cases it _must_ coalesce and fill dead objects in old regions after the early cleanup phase.