From d15768a51b17ed0924d56772a7de4e0f5994f0c1 Mon Sep 17 00:00:00 2001 From: Yi Lin <qinsoon@gmail.com> Date: Tue, 26 Mar 2024 04:21:59 +0000 Subject: [PATCH] Use mark sweep space as the non moving space --- src/plan/global.rs | 8 ++++---- src/plan/mutator_context.rs | 11 ++++------- src/policy/marksweepspace/native_ms/global.rs | 2 +- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/plan/global.rs b/src/plan/global.rs index 5b28c4b720..0697a35919 100644 --- a/src/plan/global.rs +++ b/src/plan/global.rs @@ -7,6 +7,7 @@ use crate::plan::tracing::ObjectQueue; use crate::plan::Mutator; use crate::policy::immortalspace::ImmortalSpace; use crate::policy::largeobjectspace::LargeObjectSpace; +use crate::policy::marksweepspace::native_ms::MarkSweepSpace; use crate::policy::space::{PlanCreateSpaceArgs, Space}; #[cfg(feature = "vm_space")] use crate::policy::vmspace::VMSpace; @@ -561,9 +562,8 @@ pub struct CommonPlan<VM: VMBinding> { pub immortal: ImmortalSpace<VM>, #[space] pub los: LargeObjectSpace<VM>, - // TODO: We should use a marksweep space for nonmoving. #[space] - pub nonmoving: ImmortalSpace<VM>, + pub nonmoving: MarkSweepSpace<VM>, #[parent] pub base: BasePlan<VM>, } @@ -580,7 +580,7 @@ impl<VM: VMBinding> CommonPlan<VM> { args.get_space_args("los", true, VMRequest::discontiguous()), false, ), - nonmoving: ImmortalSpace::new(args.get_space_args( + nonmoving: MarkSweepSpace::new(args.get_space_args( "nonmoving", true, VMRequest::discontiguous(), @@ -639,7 +639,7 @@ impl<VM: VMBinding> CommonPlan<VM> { &self.los } - pub fn get_nonmoving(&self) -> &ImmortalSpace<VM> { + pub fn get_nonmoving(&self) -> &MarkSweepSpace<VM> { &self.nonmoving } } diff --git a/src/plan/mutator_context.rs b/src/plan/mutator_context.rs index 5b2ce60703..759bf4e68d 100644 --- a/src/plan/mutator_context.rs +++ b/src/plan/mutator_context.rs @@ -423,10 +423,8 @@ pub(crate) fn create_allocator_mapping( map[AllocationSemantics::Los] = AllocatorSelector::LargeObject(reserved.n_large_object); reserved.n_large_object += 1; - // TODO: This should be freelist allocator once we use marksweep for nonmoving space. - map[AllocationSemantics::NonMoving] = - AllocatorSelector::BumpPointer(reserved.n_bump_pointer); - reserved.n_bump_pointer += 1; + map[AllocationSemantics::NonMoving] = AllocatorSelector::FreeList(reserved.n_free_list); + reserved.n_free_list += 1; } reserved.validate(); @@ -488,12 +486,11 @@ pub(crate) fn create_space_mapping<VM: VMBinding>( plan.common().get_los(), )); reserved.n_large_object += 1; - // TODO: This should be freelist allocator once we use marksweep for nonmoving space. vec.push(( - AllocatorSelector::BumpPointer(reserved.n_bump_pointer), + AllocatorSelector::FreeList(reserved.n_free_list), plan.common().get_nonmoving(), )); - reserved.n_bump_pointer += 1; + reserved.n_free_list += 1; } reserved.validate(); diff --git a/src/policy/marksweepspace/native_ms/global.rs b/src/policy/marksweepspace/native_ms/global.rs index a533fcde33..a5c2f809eb 100644 --- a/src/policy/marksweepspace/native_ms/global.rs +++ b/src/policy/marksweepspace/native_ms/global.rs @@ -236,7 +236,7 @@ impl<VM: VMBinding> MarkSweepSpace<VM> { } } - fn trace_object<Q: ObjectQueue>( + pub fn trace_object<Q: ObjectQueue>( &self, queue: &mut Q, object: ObjectReference,