Struct mmtk::policy::sft::EmptySpaceSFT
source · pub struct EmptySpaceSFT {}
Expand description
An empty entry for SFT.
Trait Implementations§
source§impl Debug for EmptySpaceSFT
impl Debug for EmptySpaceSFT
source§impl SFT for EmptySpaceSFT
impl SFT for EmptySpaceSFT
source§fn is_live(&self, object: ObjectReference) -> bool
fn is_live(&self, object: ObjectReference) -> bool
Is the object live, determined by the policy?
source§fn is_sane(&self) -> bool
fn is_sane(&self) -> bool
Is the object sane? A policy should return false if there is any abnormality about
object - the sanity checker will fail if an object is not sane.
fn pin_object(&self, _object: ObjectReference) -> bool
fn unpin_object(&self, _object: ObjectReference) -> bool
fn is_object_pinned(&self, _object: ObjectReference) -> bool
source§fn is_movable(&self) -> bool
fn is_movable(&self) -> bool
Is the object movable, determined by the policy? E.g. the policy is non-moving,
or the object is pinned.
source§fn is_in_space(&self, _object: ObjectReference) -> bool
fn is_in_space(&self, _object: ObjectReference) -> bool
Is the object managed by MMTk? For most cases, if we find the sft for an object, that means
the object is in the space and managed by MMTk. However, for some spaces, like MallocSpace,
we mark the entire chunk in the SFT table as a malloc space, but only some of the addresses
in the space contain actual MMTk objects. So they need a further check.
source§fn is_mmtk_object(&self, _addr: Address) -> Option<ObjectReference>
fn is_mmtk_object(&self, _addr: Address) -> Option<ObjectReference>
Is
addr
a valid object reference to an object allocated in this space?
This default implementation works for all spaces that use MMTk’s mapper to allocate memory.
Some spaces, like MallocSpace
, use third-party libraries to allocate memory.
Such spaces needs to override this method.fn find_object_from_internal_pointer( &self, _ptr: Address, _max_search_bytes: usize ) -> Option<ObjectReference>
source§fn initialize_object_metadata(&self, object: ObjectReference, _alloc: bool)
fn initialize_object_metadata(&self, object: ObjectReference, _alloc: bool)
Initialize object metadata (in the header, or in the side metadata).
source§fn sft_trace_object(
&self,
_queue: &mut VectorObjectQueue,
object: ObjectReference,
_worker: GCWorkerMutRef<'_>
) -> ObjectReference
fn sft_trace_object( &self, _queue: &mut VectorObjectQueue, object: ObjectReference, _worker: GCWorkerMutRef<'_> ) -> ObjectReference
Trace objects through SFT. This along with
SFTProcessEdges
provides an easy way for most plans to trace objects without the need to implement any plan-specific
code. However, tracing objects for some policies are more complicated, and they do not provide an
implementation of this method. For example, mark compact space requires trace twice in each GC.
Immix has defrag trace and fast trace.source§fn get_forwarded_object(
&self,
_object: ObjectReference
) -> Option<ObjectReference>
fn get_forwarded_object( &self, _object: ObjectReference ) -> Option<ObjectReference>
Get forwarding pointer if the object is forwarded.
source§fn is_reachable(&self, object: ObjectReference) -> bool
fn is_reachable(&self, object: ObjectReference) -> bool
Is the object reachable, determined by the policy?
Note: Objects in ImmortalSpace may have
is_live = true
but are actually unreachable.Auto Trait Implementations§
impl RefUnwindSafe for EmptySpaceSFT
impl Send for EmptySpaceSFT
impl Sync for EmptySpaceSFT
impl Unpin for EmptySpaceSFT
impl UnwindSafe for EmptySpaceSFT
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
§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>
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>
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)
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)
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
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