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 = 50usize
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 !Freeze for Defrag
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>
Converts
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn 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>
Converts
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which 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)
Converts
&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)
Converts
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§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