Skip to content
  • Simon Marlow's avatar
    [project @ 2006-01-17 16:03:47 by simonmar] · da69fa9c
    Simon Marlow authored
    Improve the GC behaviour of IOArrays/STArrays
    
    See Ticket #650
    
    This is a small change to the way mutable arrays interact with the GC,
    that can have a dramatic effect on performance, and make tricks with
    unsafeThaw/unsafeFreeze redundant.  Data.HashTable should be faster
    now (I haven't measured it yet).
    
    We now have two mutable array closure types, MUT_ARR_PTRS_CLEAN and
    MUT_ARR_PTRS_DIRTY.  Both are on the mutable list if the array is in
    an old generation.  writeArray# sets the type to MUT_ARR_PTRS_DIRTY.
    The garbage collector can set the type to MUT_ARR_PTRS_CLEAN if it
    finds that no element of the array points into a younger generation
    (discovering this required a small addition to evacuate(), but rough
    tests indicate that it doesn't measurably affect performance).
    
    NOTE: none of this affects unboxed arrays (IOUArray/STUArray), only
    boxed arrays (IOArray/STArray).
    
    We could go further and extend the DIRTY bit to be per-block rather
    than for the whole array, but for now this is an easy improvement.
    da69fa9c