Skip to content
  • Ben Gamari's avatar
    rts: Implement concurrent collection in the nonmoving collector · bd8e3ff4
    Ben Gamari authored
    This extends the non-moving collector to allow concurrent collection.
    
    The full design of the collector implemented here is described in detail
    in a technical note
    
        B. Gamari. "A Concurrent Garbage Collector For the Glasgow Haskell
        Compiler" (2018)
    
    This extension involves the introduction of a capability-local
    remembered set, known as the /update remembered set/, which tracks
    objects which may no longer be visible to the collector due to mutation.
    To maintain this remembered set we introduce a write barrier on
    mutations which is enabled while a concurrent mark is underway.
    
    The update remembered set representation is similar to that of the
    nonmoving mark queue, being a chunked array of `MarkEntry`s. Each
    `Capability` maintains a single accumulator chunk, which it flushed
    when it (a) is filled, or (b) when the nonmoving collector enters its
    post-mark synchronization phase.
    
    While the write barrier touches a significant amount of code ...
    bd8e3ff4