JDK-8140326 is going to put regions that failed evacuation into the collection set candidates in order to reclaim them asap to avoid unnecessary (full) gcs and prepare for pinned regions.
The current implementation is not well suited for this:
* currently collection set candidate handling is fairly ad-hoc, e.g. not having explicit sets that can e.g. be iterated over directly. This is especially bad since for JDK-8140326 we also need to differentiate candidates from marking and from evacuation failure to guide the evacuation policys.
* current collection set candidates are only materialized when there are candidates from end of marking to end of the mixed gc phase. Evacuation failure/region pinning may occur any time, so we need to keep around the candidate list(s) all the time.
* this is a good opportunity to move the _gc_efficiency member out from HeapRegion as it's only needed for the candidates