Description
Load / Write Barriers
Some kind of load barrier when loading from other heap objects
When does the runtime have to check the forward pointers of a cell?
How does this mechanism work?
How is it implemented?
Phases
Idle | Application is running normally, GC is not running
Idle -> Marking | Mark roots and start background marking
Marking | Heap tracing, write barriers append to queue drained at next pause
Marking -> Evacuation | Drain SATB buffers and initialize evacuation phase
Evacuation | Heap objects get relocated, write barriers access forward pointer
Evacuation -> UpdateRef | Initialize update ref phase
UpdateRef | Heap references to old objects get updated, write barriers update references
UpdateRef -> Idle | Finalize garbage collection, prepare for idle phase
Concurrent Marking
Init phase
Workers mark root set
New allocations marked grey
Mark all VM reachable objects
Arm SATB buffers
Concurrent phase
Traverse application and mark reachable objects
Collect statistics and information about heap regions
Application threads
Write barriers
Read barriers
Evacuation
Init phase
Disable and mark values from SATB buffers
Finish marking
Build From-To evacuation mappings
Evacuate worker root set
Concurrent phase
Traverse From Regions and evacuate cells to To-regions
Application threads
How do evacuated cells know where they end up?
Build mapping of From-spaces to To-spaces
During the Init-Evacuate pause, allocate each alive cell in From-regions a slot in the corresponding
To-regions
Evacuation can atomically check if the final copy has already been created / initialized
Each from-space knows in what to-space it will end up
Need some easy way of knowing which offset each cell ultimately ends up at
How are the copies that are created during a contended evacuation recycled?
Mechanism to un-allocate a cell, works only if no other cell was allocated since
Since another copy will be allocated in another region, we can just unwind the last allocation and reuse it for the next one
UpdateRef
Init phase
Concurrent phase
Update references to objects in from-spaces
Application threads
Update references during load barriers
Reactions are currently unavailable
You can’t perform that action at this time.
Load / Write Barriers
Phases
Concurrent Marking
Evacuation
To-regions
UpdateRef