You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This PR enables transitively pinning (TP) objects from particular roots for Immix/StickyImmix (#897)
- A new bucket `ImmovableClosure` has been created to trace and
transitively pin roots, i.e., roots in which no object in its transitive
closure is allowed to move.
- `RootsWorkFactory` has two new functions
`create_process_tp_edge_roots_work` and
`create_process_tp_node_roots_work` to create work to process these
roots.
- `GCWorkContext` expects an `TPProcessEdges` type, which performs the
transitively pinning trace (and is unimplemented for unsupported plans).
- `create_process_node_roots_work` creates work to process roots in the
`NodeRootsTrace` bucket, which is executed after `TPClosure`, but any
work derived from it is put into the regular `Closure` bucket, meaning
that the binding shouldn't need to pin root nodes.
- For sticky immix, currently we only support non-moving nursery
collections (`sticky_immix_non_moving_nursery`), but the solution here
is to use the `TPClosure` on the modified buffer constructed from the
write barrier (since during nursery collection we do not know if these
objects should be transitively pinned or not).
---------
Co-authored-by: Yi Lin <[email protected]>
Co-authored-by: Kunshan Wang <[email protected]>
0 commit comments