Skip to content

Commit

Permalink
Update pointers in mourn queue during compaction.
Browse files Browse the repository at this point in the history
Exchange topX and myX to keep topX alive while memory is compacted
  • Loading branch information
guillep committed Jan 13, 2021
1 parent 08c8de9 commit 853a73b
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 3 deletions.
4 changes: 2 additions & 2 deletions smalltalksrc/VMMaker/SpurMemoryManager.class.st
Expand Up @@ -857,8 +857,8 @@ SpurMemoryManager class >> initialize [
created by popping emptied pages are kept on the ObjStackFreex list.
ObjStackNextx must be the last field for swizzleObjStackAt:."
ObjStackPageSlots := 4092. "+ double header = 16k bytes per page in 32-bits"
ObjStackTopx := 0.
ObjStackMyx := 1.
ObjStackTopx := 1.
ObjStackMyx := 0.
ObjStackFreex := 2.
ObjStackNextx := 3.
ObjStackFixedSlots := 4.
Expand Down
11 changes: 10 additions & 1 deletion smalltalksrc/VMMaker/SpurPlanningCompactor.class.st
Expand Up @@ -890,11 +890,20 @@ SpurPlanningCompactor >> updatePointersInInitialImmobileObjects [
SpurPlanningCompactor >> updatePointersInManagerHeapEntities [
"The special non-pointer objects containing pointers, which are the objStacks and the rememberedSet,
must be updated manually since they will not be recognized as containing pointers in the normal sweep."
manager objStack: manager mournQueue do:
[:i :page| | mourner |
mourner := manager fetchPointer: i ofObject: page.
(manager isNonImmediate: mourner) ifTrue: [ | fwd |
fwd := manager fetchPointer: 0 ofObject: mourner.
manager storePointerUnchecked: i ofObject: page withValue: fwd ]].
manager relocateObjStacksForPlanningCompactor.
(scavenger rememberedSetSize > 0
and: [self isMobile: firstFieldOfRememberedSet]) ifTrue:
[firstFieldOfRememberedSet := manager fetchPointer: 0 ofObject: firstFieldOfRememberedSet].
self relocateObjectsInHeapEntity: manager rememberedSetObj from: 1 to: scavenger rememberedSetSize - 1
self relocateObjectsInHeapEntity: manager rememberedSetObj from: 1 to: scavenger rememberedSetSize - 1.
"Note that we /must not/ set the rememberedSetObj here since it is a slot in the hiddenRootsObj
and will be updated normally in updatePointersInInitialImmobileObjects. So do not do
(self isMobile: manager rememberedSetObj) ifTrue:
Expand Down

0 comments on commit 853a73b

Please sign in to comment.