Note [Live data accounting in nonmoving collector]
The nonmoving collector uses an approximate heuristic for reporting live data quantity. Specifically, during mark we record how much live data we find in nonmoving_segment_live_words. At the end of mark this is combined with nonmoving_large_words and nonmoving_compact_words, and we declare this amount to be how much live data we have on in the nonmoving heap (by setting oldest_gen->live_estimate). In addition, we update oldest_gen->live_estimate every time we fill a segment. This, as well, is quite approximate: we assume that all blocks above next_free_next are newly-allocated. In principle we could refer to the bitmap to count how many blocks we actually allocated but this too would be approximate due to concurrent collection and ultimately seems more costly than the problem demands.
References 0
This Note does not link to any other.
Referenced by 5
- rts/sm/NonMovingAllocate.c call site ×2
- Non-moving garbage collector
- rts/sm/NonMoving.c call site
- rts/sm/Sanity.c call site