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>

source

pub fn new( options: Arc<Options>, gc_requester: Arc<GCRequester<VM>>, state: Arc<GlobalState> ) -> Self

source

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.

source

fn plan(&self) -> &dyn Plan<VM = VM>

source

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 could None if the poll is not triggered by a space.
source

pub fn should_do_stress_gc(&self) -> bool

source

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.

source

pub fn is_heap_full(&self) -> bool

Check if the heap is full

source

pub fn get_max_nursery_bytes(&self) -> usize

Return upper bound of the nursery size (in number of bytes)

source

pub fn get_min_nursery_bytes(&self) -> usize

Return lower bound of the nursery size (in number of bytes)

source

pub fn get_max_nursery_pages(&self) -> usize

Return upper bound of the nursery size (in number of pages)

source

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> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &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
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.