Ignore:
Timestamp:
Dec 22, 2009, 9:58:21 PM (11 years ago)
Author:
gz
Message:

Changes in handling of weak vectors (i.e. populations and weak hash table vectors) in ephemeral gc, to allow egc to collect ephemeral objects stored in older weak vectors:

  • all tenured populations are now processed at every gc. (In normal use, population.data has newest conses at the front, and processing will terminate as soon as it reaches a cons not in the area being gc'd, so in practice this will only process cells actually added in the current generation, which should limit the performance impact)
  • the intergenerational pointers of all tenured weak hash vectors are now processed at every gc.

Details:

  • add new global WEAKVLL to store weak vectors between gc's, update it during gc.
  • initialize GCweakvll from WEAKVLL so tenured vectors are included.
  • keep the gc-link field in weak vectors untagged (i.e. tagged as a fixnum) so can control when they get forwarded.
  • when marking/reaping weak hash vectors, use refbits to skip over uninteresting entries.
  • during normal mark phase, arrange to not mark population.data even if intergen.
  • account for population.termination becoming intergen even if it wasn't before.
  • save WEAKVLL when image is saved
Location:
trunk/source
Files:
2 edited

Legend:

Unmodified
Added
Removed
Note: See TracChangeset for help on using the changeset viewer.