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§

source§

impl SFTSparseChunkMap

source

pub fn new() -> Self

source

fn log_update( &self, space: &(dyn SFT + Sync + 'static), start: Address, bytes: usize )

source

fn trace_sft_map(&self)

source

fn print_sft_map(&self) -> String

source

fn set(&self, chunk: usize, sft: &(dyn SFT + Sync + 'static))

Trait Implementations§

source§

impl SFTMap for SFTSparseChunkMap

source§

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:

  1. 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

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>

Get the side metadata spec this SFT map uses.
source§

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

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

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)

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 )

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

impl Sync for SFTSparseChunkMap

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.