Struct mmtk::policy::sft_map::sparse_chunk_map::SFTSparseChunkMap
source · pub struct SFTSparseChunkMap {
sft: Vec<SFTRefStorage>,
}
Expand description
The chunk map is a sparse table. It has one entry for each chunk in the address space we may use.
Fields§
§sft: Vec<SFTRefStorage>
Implementations§
Trait Implementations§
source§impl SFTMap for SFTSparseChunkMap
impl SFTMap for SFTSparseChunkMap
source§unsafe fn update(
&self,
space: *const dyn SFT + Sync + 'static,
start: Address,
bytes: usize
)
unsafe fn update( &self, space: *const dyn SFT + Sync + 'static, start: Address, bytes: usize )
Update SFT map for the given address range. It should be used when we acquire new memory and use it as part of a space. For example, the cases include:
- when a space grows, 2. when initializing a contiguous space, 3. when ensure_mapped() is called on a space.
source§fn has_sft_entry(&self, addr: Address) -> bool
fn has_sft_entry(&self, addr: Address) -> bool
Check if the address has an SFT entry in the map (including an empty SFT entry). This is mostly a bound check
to make sure that we won’t have an index-out-of-bound error. For the sake of performance, the implementation
of other methods in this trait (such as get_unchecked(), update() and clear()) does not need to do this check implicitly.
Instead, they assume the address has a valid entry in the SFT. If an address could be arbitary, they should call this
method as a pre-check before they call those methods in the trait. We also provide a method
get_checked()
which includes
this check, and will return an empty SFT if the address is out of bound.source§fn get_side_metadata(&self) -> Option<&SideMetadataSpec>
fn get_side_metadata(&self) -> Option<&SideMetadataSpec>
Get the side metadata spec this SFT map uses.
source§fn get_checked(&self, address: Address) -> &dyn SFT
fn get_checked(&self, address: Address) -> &dyn SFT
Get SFT for the address. The address can be arbitrary. For out-of-bound access, an empty SFT will be returned.
We only provide the checked version for
get()
, as it may be used to query arbitrary objects and addresses. Other methods like update/clear/etc
are
mostly used inside MMTk, and in most cases, we know that they are within our space address range.source§unsafe fn get_unchecked(&self, address: Address) -> &dyn SFT
unsafe fn get_unchecked(&self, address: Address) -> &dyn SFT
Get SFT for the address. The address must have a valid SFT entry in the table (e.g. from an object reference, or from an address
that is known to be in our spaces). Otherwise, use
get_checked()
. Read moresource§unsafe fn clear(&self, chunk_start: Address)
unsafe fn clear(&self, chunk_start: Address)
Clear SFT for the address. The address must have a valid SFT entry in the table. Read more
source§fn notify_space_creation(&mut self, _space: *const dyn SFT + Sync + 'static)
fn notify_space_creation(&mut self, _space: *const dyn SFT + Sync + 'static)
Notify the SFT map for space creation.
DenseChunkMap
needs to create an entry for the space.source§unsafe fn eager_initialize(
&mut self,
space: *const dyn SFT + Sync + 'static,
start: Address,
bytes: usize
)
unsafe fn eager_initialize( &mut self, space: *const dyn SFT + Sync + 'static, start: Address, bytes: usize )
Eagerly initialize the SFT table. For most implementations, it could be the same as update().
However, we need this as a seprate method for SFTDenseChunkMap, as it needs to map side metadata first
before setting the table. Read more
impl Sync for SFTSparseChunkMap
Auto Trait Implementations§
impl RefUnwindSafe for SFTSparseChunkMap
impl Send for SFTSparseChunkMap
impl Unpin for SFTSparseChunkMap
impl UnwindSafe for SFTSparseChunkMap
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