Skip to content

Commit

Permalink
swiper: introduce sweep() method in full GC
Browse files Browse the repository at this point in the history
  • Loading branch information
dinfuehr committed Jan 5, 2024
1 parent 82fe52d commit 5fe568c
Showing 1 changed file with 18 additions and 14 deletions.
32 changes: 18 additions & 14 deletions dora-runtime/src/gc/swiper/full.rs
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ impl<'a> FullCollector<'a> {
self.select_evacuated_pages();
self.evacuate();
self.update_references();
self.clear_markbits();
self.free_pages();
self.sweep();
self.release_evacuated_pages();

self.reset_cards();

Expand Down Expand Up @@ -259,7 +259,7 @@ impl<'a> FullCollector<'a> {
});
}

fn clear_markbits(&mut self) {
fn sweep(&mut self) {
let old_evacuated_set: HashSet<Page> =
HashSet::from_iter(self.old_evacuated_pages.iter().map(|pair| pair.0));

Expand All @@ -268,11 +268,7 @@ impl<'a> FullCollector<'a> {
continue;
}

walk_region(self.vm, page.object_area(), |object, _addr, _size| {
if object.header().is_marked() {
object.header().unmark();
}
});
self.sweep_page(page);
}

self.large_space.remove_objects(|object_start| {
Expand All @@ -287,6 +283,20 @@ impl<'a> FullCollector<'a> {
});
}

fn sweep_page(&mut self, page: Page) {
walk_region(self.vm, page.object_area(), |object, _addr, _size| {
if object.header().is_marked() {
object.header().unmark();
}
});
}

fn release_evacuated_pages(&mut self) {
for (page, _) in &self.old_evacuated_pages {
self.old_protected.free_page(*page);
}
}

fn evacuate(&mut self) {
self.old_protected.fill_alloc_page();

Expand Down Expand Up @@ -324,12 +334,6 @@ impl<'a> FullCollector<'a> {
});
}

fn free_pages(&mut self) {
for (page, _) in self.old_evacuated_pages.clone() {
self.old_protected.free_page(page);
}
}

fn reset_cards(&mut self) {
for page in self.old_protected.pages() {
self.card_table.reset_page(page);
Expand Down

0 comments on commit 5fe568c

Please sign in to comment.