pub struct Defrag {
in_defrag_collection: AtomicBool,
defrag_space_exhausted: AtomicBool,
pub mark_histograms: Mutex<Vec<[usize; 17]>>,
pub defrag_spill_threshold: AtomicUsize,
available_clean_pages_for_defrag: AtomicUsize,
}
Fields§
§in_defrag_collection: AtomicBool
Is current GC a defrag GC?
defrag_space_exhausted: AtomicBool
Is defrag space exhausted?
mark_histograms: Mutex<Vec<[usize; 17]>>
A list of completed mark histograms reported by workers
defrag_spill_threshold: AtomicUsize
A block with number of holes greater than this threshold will be defragmented.
available_clean_pages_for_defrag: AtomicUsize
The number of remaining clean pages in defrag space.
Implementations§
source§impl Defrag
impl Defrag
const NUM_BINS: usize = 17usize
const DEFRAG_LINE_REUSE_RATIO: f32 = 0.990000009f32
const MIN_SPILL_THRESHOLD: usize = 2usize
const DEFRAG_HEADROOM_PERCENT: usize = 2usize
sourcepub const fn new_histogram(&self) -> [usize; 17]
pub const fn new_histogram(&self) -> [usize; 17]
Allocate a new local histogram.
sourcepub fn add_completed_mark_histogram(&self, histogram: [usize; 17])
pub fn add_completed_mark_histogram(&self, histogram: [usize; 17])
Report back a completed mark histogram
sourcepub fn decide_whether_to_defrag(
&self,
emergency_collection: bool,
collect_whole_heap: bool,
collection_attempts: usize,
user_triggered: bool,
exhausted_reusable_space: bool,
full_heap_system_gc: bool
)
pub fn decide_whether_to_defrag( &self, emergency_collection: bool, collect_whole_heap: bool, collection_attempts: usize, user_triggered: bool, exhausted_reusable_space: bool, full_heap_system_gc: bool )
Determine whether the current GC should do defragmentation.
sourcepub fn defrag_headroom_pages<VM: VMBinding>(
&self,
space: &ImmixSpace<VM>
) -> usize
pub fn defrag_headroom_pages<VM: VMBinding>( &self, space: &ImmixSpace<VM> ) -> usize
Get the number of defrag headroom pages.
sourcepub fn space_exhausted(&self) -> bool
pub fn space_exhausted(&self) -> bool
Check if the defrag space is exhausted.
sourcepub fn notify_new_clean_block(&self, copy: bool)
pub fn notify_new_clean_block(&self, copy: bool)
Update available_clean_pages_for_defrag counter when a clean block is allocated.
sourcepub fn prepare<VM: VMBinding>(
&self,
space: &ImmixSpace<VM>,
plan_stats: StatsForDefrag
)
pub fn prepare<VM: VMBinding>( &self, space: &ImmixSpace<VM>, plan_stats: StatsForDefrag )
Prepare work. Should be called in ImmixSpace::prepare.
sourcefn get_available_lines<VM: VMBinding>(
&self,
space: &ImmixSpace<VM>,
spill_avail_histograms: &mut [usize; 17]
) -> usize
fn get_available_lines<VM: VMBinding>( &self, space: &ImmixSpace<VM>, spill_avail_histograms: &mut [usize; 17] ) -> usize
Get the numebr of all the recyclable lines in all the reusable blocks.
sourcefn establish_defrag_spill_threshold<VM: VMBinding>(
&self,
space: &ImmixSpace<VM>
)
fn establish_defrag_spill_threshold<VM: VMBinding>( &self, space: &ImmixSpace<VM> )
Calculate the defrag threshold.
sourcepub fn reset_in_defrag(&self)
pub fn reset_in_defrag(&self)
Reset the in-defrag state.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Defrag
impl Send for Defrag
impl Sync for Defrag
impl Unpin for Defrag
impl UnwindSafe for Defrag
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