Rework the newly-allocated region logic in RegionSpace.
- Mark large (and large tail) regions as "newly allocated" in
RegionSpace::AllocLarge when they are allocated for non-evac
purposes, the same way non-large regions were already marked
as "newly allocated" in RegionSpace::AllocateRegion when
they were allocated for non-evac purposes.
- Clear the "newly allocated" status of regions only when
setting them as (evac) from-space and non-evac from-space.
This addresses an issue with Sticky-Bit (Generational) CC collection,
where an assertion in ConcurrentCopying::VerifyNoMissingCardMarks
could fail when a recently allocated large region held a dead large
object holding a (presumably stale) object reference pointing to a
newly allocated (non-large) region.
Test: ART run-tests & gtests, libcore tests, JDWP tests (host & device)
Test: Device/emulator boot test
Bug: 67628039
Bug: 12687968
Change-Id: Idd20c159db9359ee783a421ec699d3e3aa450552
4 files changed