Changes between Initial Version and Version 1 of Ticket #650


Ignore:
Timestamp:
Jan 12, 2006 2:52:27 PM (12 years ago)
Author:
simonmar
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #650 – Description

    initial v1  
    5050
    5151We could refine the write barrier so that it marks just part of the array as dirty, instead of the whole array.  The natural choice is to put the mark bit in the block descriptor for the current block, giving us a granularity of 4/8k, which is possibly a bit large but other solutions are much more expensive.  Even this would significantly increase the cost of the write barrier, so it may be that we want a different kind of array type for this (`LargeMutArr#`?).  Furthermore, currently not all arrays have their own block descriptors ("large objects" in GHC's storage manager), the small ones are allocated in movable memory.  To do this, we would have to ensure that every array had its own block (or check in the write barrier, which adds even more expense).
     52
     53== IORefs ==
     54
     55This also affects IORefs, which are essentially single-element IOArrays.  I just noticed that GHC often has a large number of IORefs hanging around in the heap from the typechecker, and the cost of traversing the mutable list can dominate minor GCs.