pub struct FixedHeapSizeTrigger {
    total_pages: usize,
}
Expand description

A simple GC trigger that uses a fixed heap size.

Fields§

§total_pages: usize

Trait Implementations§

source§

impl<VM: VMBinding> GCTriggerPolicy<VM> for FixedHeapSizeTrigger

source§

fn is_gc_required( &self, space_full: bool, space: Option<SpaceStats<'_, VM>>, plan: &dyn Plan<VM = VM> ) -> bool

Is a GC required now? The GC trigger may implement its own heuristics to decide when a GC should be performed. However, we recommend the implementation to do its own checks first, and always call plan.collection_required(space_full, space) at the end as a fallback to see if the plan needs to do a GC. Read more
source§

fn is_heap_full(&self, plan: &dyn Plan<VM = VM>) -> bool

Is current heap full?
source§

fn get_current_heap_size_in_pages(&self) -> usize

Return the current heap size (in pages)
source§

fn get_max_heap_size_in_pages(&self) -> usize

Return the upper bound of heap size
source§

fn can_heap_size_grow(&self) -> bool

Can the heap size grow?
source§

fn on_pending_allocation(&self, _pages: usize)

Inform the triggering policy that we have pending allocation. Any GC trigger policy with dynamic heap size should take this into account when calculating a new heap size. Failing to do so may result in unnecessay GCs, or result in an infinite loop if the new heap size can never accomodate the pending allocation.
source§

fn on_gc_start(&self, _mmtk: &'static MMTK<VM>)

Inform the triggering policy that a GC starts.
source§

fn on_gc_release(&self, _mmtk: &'static MMTK<VM>)

Inform the triggering policy that a GC is about to start the release work. This is called in the global Release work packet. This means we assume a plan do not schedule any work that reclaims memory before the global Release work. The current plans satisfy this assumption: they schedule other release work in plan.release().
source§

fn on_gc_end(&self, _mmtk: &'static MMTK<VM>)

Inform the triggering policy that a GC ends.

Auto Trait Implementations§

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.