Struct mmtk::policy::immix::immixspace::ImmixSpaceArgs
source · pub struct ImmixSpaceArgs {
pub unlog_object_when_traced: bool,
pub reset_log_bit_in_major_gc: bool,
pub mixed_age: bool,
}
Expand description
Some arguments for Immix Space.
Fields§
§unlog_object_when_traced: bool
Mark an object as unlogged when we trace an object.
Normally we set the log bit when we copy an object with crate::util::copy::CopySemantics::PromoteToMature
.
In sticky immix, we ‘promote’ an object to mature when we trace the object
(no matter we copy an object or not). So we have to use PromoteToMature
, and instead
just set the log bit in the space when an object is traced.
reset_log_bit_in_major_gc: bool
Reset log bit at the start of a major GC. Normally we do not need to do this. When immix is used as the mature space, any object should be set as unlogged, and that bit does not need to be cleared even if the object is dead. But in sticky Immix, the mature object and the nursery object are in the same space, we will have to use the bit to differentiate them. So we reset all the log bits in major GCs, and unlogged the objects when they are traced (alive).
mixed_age: bool
Whether this ImmixSpace instance contains both young and old objects. This affects the updating of valid-object bits. If some lines or blocks of this ImmixSpace instance contain young objects, their VO bits need to be updated during this GC. Currently only StickyImmix is affected. GenImmix allocates young objects in a separete CopySpace nursery and its VO bits can be cleared in bulk.
Auto Trait Implementations§
impl RefUnwindSafe for ImmixSpaceArgs
impl Send for ImmixSpaceArgs
impl Sync for ImmixSpaceArgs
impl Unpin for ImmixSpaceArgs
impl UnwindSafe for ImmixSpaceArgs
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
§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>
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>
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)
&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)
&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>
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>
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