Skip to content
  • Simon Marlow's avatar
    Implement stack chunks and separate TSO/STACK objects · f30d5273
    Simon Marlow authored
    This patch makes two changes to the way stacks are managed:
    
    1. The stack is now stored in a separate object from the TSO.
    
    This means that it is easier to replace the stack object for a thread
    when the stack overflows or underflows; we don't have to leave behind
    the old TSO as an indirection any more.  Consequently, we can remove
    ThreadRelocated and deRefTSO(), which were a pain.
    
    This is obviously the right thing, but the last time I tried to do it
    it made performance worse.  This time I seem to have cracked it.
    
    2. Stacks are now represented as a chain of chunks, rather than
       a single monolithic object.
    
    The big advantage here is that individual chunks are marked clean or
    dirty according to whether they contain pointers to the young
    generation, and the GC can avoid traversing clean stack chunks during
    a young-generation collection.  This means that programs with deep
    stacks will see a big saving in GC overhead when using the default GC
    settings.
    
    ...
    f30d5273