pub(crate) struct DefaultRootsWorkFactory<VM: VMBinding, DT: Trace<VM = VM>, PT: Trace<VM = VM>> {
pub(crate) mmtk: &'static MMTK<VM>,
phantom: PhantomData<(DT, PT)>,
}Expand description
An implementation of RootsWorkFactory for stop-the-world tracing GC. It will create work
packets to find the transitive closure from roots, assuming mutators are stopped during the GC.
It creates the ProcessSlots work packet to handle non-pinning roots, and
ProcessPinningRoots to handle pinning roots (transitive or not). The work packets will be
added to the WorkBucketStage::TPinningClosure, WorkBucketStage::PinningRootsTrace and
WorkBucketStage::Closure buckets depending on the kinds of roots.
DT and PT are the Trace types for the default trace and pinning trace, respectively.
Fields§
§mmtk: &'static MMTK<VM>§phantom: PhantomData<(DT, PT)>Implementations§
Trait Implementations§
Source§impl<VM: VMBinding, DT: Trace<VM = VM>, PT: Trace<VM = VM>> Clone for DefaultRootsWorkFactory<VM, DT, PT>
impl<VM: VMBinding, DT: Trace<VM = VM>, PT: Trace<VM = VM>> Clone for DefaultRootsWorkFactory<VM, DT, PT>
Source§impl<VM: VMBinding, DT: Trace<VM = VM>, PT: Trace<VM = VM>> RootsWorkFactory<<VM as VMBinding>::VMSlot> for DefaultRootsWorkFactory<VM, DT, PT>
impl<VM: VMBinding, DT: Trace<VM = VM>, PT: Trace<VM = VM>> RootsWorkFactory<<VM as VMBinding>::VMSlot> for DefaultRootsWorkFactory<VM, DT, PT>
Source§fn create_process_roots_work(&mut self, slots: Vec<VM::VMSlot>)
fn create_process_roots_work(&mut self, slots: Vec<VM::VMSlot>)
Create work packets to handle non-pinned roots. The roots are represented as slots so that
they can be updated. Read more
Source§fn create_process_pinning_roots_work(&mut self, nodes: Vec<ObjectReference>)
fn create_process_pinning_roots_work(&mut self, nodes: Vec<ObjectReference>)
Create work packets to handle non-transitively pinning roots. Read more
Source§fn create_process_tpinning_roots_work(&mut self, nodes: Vec<ObjectReference>)
fn create_process_tpinning_roots_work(&mut self, nodes: Vec<ObjectReference>)
Create work packets to handle transitively pinning (TP) roots. Read more
Auto Trait Implementations§
impl<VM, DT, PT> Freeze for DefaultRootsWorkFactory<VM, DT, PT>
impl<VM, DT, PT> !RefUnwindSafe for DefaultRootsWorkFactory<VM, DT, PT>
impl<VM, DT, PT> Send for DefaultRootsWorkFactory<VM, DT, PT>
impl<VM, DT, PT> Sync for DefaultRootsWorkFactory<VM, DT, PT>
impl<VM, DT, PT> Unpin for DefaultRootsWorkFactory<VM, DT, PT>
impl<VM, DT, PT> !UnwindSafe for DefaultRootsWorkFactory<VM, DT, PT>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Converts
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Converts
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Converts
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Converts
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more