pub struct GCTrigger<VM: VMBinding> {
plan: MaybeUninit<&'static dyn Plan<VM = VM>>,
pub policy: Box<dyn GCTriggerPolicy<VM>>,
gc_requester: Arc<GCRequester<VM>>,
options: Arc<Options>,
state: Arc<GlobalState>,
}
Expand description
GCTrigger is responsible for triggering GCs based on the given policy. All the decisions about heap limit and GC triggering should be resolved here. Depending on the actual policy, we may either forward the calls either to the plan or to the binding/runtime.
Fields§
§plan: MaybeUninit<&'static dyn Plan<VM = VM>>
The current plan. This is uninitialized when we create it, and later initialized once we have a fixed address for the plan.
policy: Box<dyn GCTriggerPolicy<VM>>
The triggering policy.
gc_requester: Arc<GCRequester<VM>>
§options: Arc<Options>
§state: Arc<GlobalState>
Implementations§
source§impl<VM: VMBinding> GCTrigger<VM>
impl<VM: VMBinding> GCTrigger<VM>
pub fn new( options: Arc<Options>, gc_requester: Arc<GCRequester<VM>>, state: Arc<GlobalState> ) -> Self
sourcepub fn set_plan(&mut self, plan: &'static dyn Plan<VM = VM>)
pub fn set_plan(&mut self, plan: &'static dyn Plan<VM = VM>)
Set the plan. This is called in create_plan()
after we created a boxed plan.
fn plan(&self) -> &dyn Plan<VM = VM>
sourcepub fn poll(&self, space_full: bool, space: Option<&dyn Space<VM>>) -> bool
pub fn poll(&self, space_full: bool, space: Option<&dyn Space<VM>>) -> bool
This method is called periodically by the allocation subsystem (by default, each time a page is consumed), and provides the collector with an opportunity to collect.
Arguments:
space_full
: Space request failed, must recover pages within ‘space’.space
: The space that triggered the poll. This couldNone
if the poll is not triggered by a space.
pub fn should_do_stress_gc(&self) -> bool
sourcepub(crate) fn should_do_stress_gc_inner(
state: &GlobalState,
options: &Options
) -> bool
pub(crate) fn should_do_stress_gc_inner( state: &GlobalState, options: &Options ) -> bool
Check if we should do a stress GC now. If GC is initialized and the allocation bytes exceeds the stress factor, we should do a stress GC.
sourcepub fn is_heap_full(&self) -> bool
pub fn is_heap_full(&self) -> bool
Check if the heap is full
sourcepub fn get_max_nursery_bytes(&self) -> usize
pub fn get_max_nursery_bytes(&self) -> usize
Return upper bound of the nursery size (in number of bytes)
sourcepub fn get_min_nursery_bytes(&self) -> usize
pub fn get_min_nursery_bytes(&self) -> usize
Return lower bound of the nursery size (in number of bytes)
sourcepub fn get_max_nursery_pages(&self) -> usize
pub fn get_max_nursery_pages(&self) -> usize
Return upper bound of the nursery size (in number of pages)
sourcepub fn get_min_nursery_pages(&self) -> usize
pub fn get_min_nursery_pages(&self) -> usize
Return lower bound of the nursery size (in number of pages)
Auto Trait Implementations§
impl<VM> !RefUnwindSafe for GCTrigger<VM>
impl<VM> Send for GCTrigger<VM>
impl<VM> Sync for GCTrigger<VM>
impl<VM> Unpin for GCTrigger<VM>
impl<VM> !UnwindSafe for GCTrigger<VM>
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
§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>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<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>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
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)
&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)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§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>
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>
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