1.6 KiB
TODO: notes on how cyclone's GC works
terms: mutators, collector, what else?
two types:
- minor GC (stack portion from Cheney on MTA)
- major GC - Doligez-Leroy-Gonthier (DLG) collector
motivations:
- extend baker's approach to support multiple mutators
- State of the art GC's are built on top of DLG (stopless, chicken, clover)
limitations or potential issues:
- DLG memory fragmentation could be an issue for long-running programs
minor GC
changes from Cheney on MTA:
- each thread has its own stack
major GC
overview from paper
- single collector thread, multiple mutator threads
- single heap
- generally try to use atomic operations, but there is some locking. In particular, heap is protected by lock during object allocation / deallocation
GC stages / status: /* Enums for tri-color marking */ typedef enum { STATUS_ASYNC , STATUS_SYNC1 , STATUS_SYNC2 } gc_status_type;
typedef enum { STAGE_CLEAR_OR_MARKING , STAGE_TRACING //, STAGE_REF_PROCESSING , STAGE_SWEEPING , STAGE_RESTING } gc_stage_type;
object colors: red blue white gray black
important to explain how minor/major algorithms are interleaved. EG:
thread states: typedef enum { CYC_THREAD_STATE_NEW , CYC_THREAD_STATE_RUNNABLE , CYC_THREAD_STATE_BLOCKED , CYC_THREAD_STATE_BLOCKED_COOPERATING , CYC_THREAD_STATE_TERMINATED } cyc_thread_state_type;
typedef struct gc_thread_data_t gc_thread_data;
ETC
TODO: references
include papers, etc here and link to bullet numbers above