Skip to content

Commit

Permalink
Fixing FullGC test
Browse files Browse the repository at this point in the history
  • Loading branch information
PalumboN committed Apr 14, 2022
1 parent f2a3b8a commit fe7dab6
Show file tree
Hide file tree
Showing 8 changed files with 32 additions and 43 deletions.
41 changes: 21 additions & 20 deletions smalltalksrc/VMMaker/SpurGenerationScavenger.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -1199,34 +1199,35 @@ SpurGenerationScavenger >> scavengeReferentsOf: referrer [

{ #category : #scavenger }
SpurGenerationScavenger >> scavengeRememberedSetStartingAt: n [

"scavengeRememberedSetStartingAt: n traverses objects in the remembered
set starting at the nth one. If the object does not refer to any new objects, it
is removed from the set. Otherwise, its new referents are scavenged. Defer
scavenging ephemerons until after a complete scavenge has been performed,
so that triggered ephemerons can be fired. Move them to the front of the set
and count them in numRememberedEphemerons for later scanning."

<inline: false>
| destIndex |

destIndex := n.
rememberedSetNew
rememberedSetWithIndexDo: [ :referrer :sourceIndex | "Any potential firing ephemerons should not be scanned yet.
| destIndex sourceIndex referrer |
sourceIndex := destIndex := n.
[sourceIndex < rememberedSetNew rememberedSetSize] whileTrue:
["*Don't* follow forwarding pointers here. oldSpace objects may refer
to these roots, and so they can't be removed in the scavenge."
referrer := rememberedSetNew objectAt: sourceIndex.
"Any potential firing ephemerons should not be scanned yet.
Move any to the front of the set to save time in later scanning."
((manager isEphemeron: referrer) and: [
(self isScavengeSurvivor: (manager keyOfEphemeron: referrer)) not ])
ifTrue: [
self assert: destIndex >= rememberedSetNew numRememberedEphemerons.
rememberedSetNew moveEphemeron: referrer destinationIndex: destIndex.
destIndex := destIndex + 1 ]
ifFalse: [
(self scavengeReferentsOf: referrer)
ifTrue: [
rememberedSetNew save: referrer at: destIndex.
destIndex := destIndex + 1 ]
ifFalse: [ manager setIsRememberedOf: referrer to: false ] ] ]
startingAt: n.
((manager isEphemeron: referrer)
and: [(self isScavengeSurvivor: ((manager keyOfEphemeron: referrer))) not])
ifTrue:
[self assert: destIndex >= rememberedSetNew numRememberedEphemerons.
rememberedSetNew moveNewEphemeron: referrer destinationIndex: destIndex.
destIndex := destIndex + 1]
ifFalse:
[(self scavengeReferentsOf: referrer)
ifTrue:
[rememberedSetNew save: referrer at: destIndex.
destIndex := destIndex + 1]
ifFalse:
[manager setIsRememberedOf: referrer to: false]].
sourceIndex := sourceIndex + 1].
rememberedSetNew rememberedSetSize: destIndex.
self assert: self noUnfiredEphemeronsAtEndOfRememberedSet
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,3 @@ SpurGenerationScavengerSimulator >> recordMovements [
SpurGenerationScavengerSimulator >> rememberedSet [
^rememberedSet
]

{ #category : #scavenger }
SpurGenerationScavengerSimulator >> scavenge: tenuringCriterion [
manager bootstrapping ifFalse:
[coInterpreter transcript nextPutAll: 'scavenging('; print: manager statScavenges; nextPutAll: ')...'; flush.
cameFrom ifNotNil:
[cameFrom := Dictionary new]].
^super scavenge: tenuringCriterion
]
2 changes: 1 addition & 1 deletion smalltalksrc/VMMaker/SpurMemoryManager.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -6327,7 +6327,7 @@ SpurMemoryManager >> initialize [
remapBufferCount := extraRootCount := 0. "see below"
freeListsMask := totalFreeOldSpace := lowSpaceThreshold := 0.
checkForLeaks := 0.
needGCFlag := signalLowSpace := marking := false.
permSpaceDirty := needGCFlag := signalLowSpace := marking := false.
becomeEffectsFlags := gcPhaseInProgress := 0.
statScavenges := statIncrGCs := statFullGCs := 0.
statMaxAllocSegmentTime := 0.
Expand Down
16 changes: 8 additions & 8 deletions smalltalksrc/VMMaker/SpurRememberedSet.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,15 @@ SpurRememberedSet >> manager: anObject [
manager := anObject
]

{ #category : #accessing }
SpurRememberedSet >> moveLastObjectTo: anIndex [

rememberedSetArray
at: anIndex put: (rememberedSetArray at: rememberedSetSize - 1)
]

{ #category : #'debug support' }
SpurRememberedSet >> moveEphemeron: ephemeron destinationIndex: destIndex [
SpurRememberedSet >> moveNewEphemeron: ephemeron destinationIndex: destIndex [

rememberedSetArray
at: destIndex put: (rememberedSetArray at: numRememberedEphemerons);
Expand All @@ -122,13 +129,6 @@ SpurRememberedSet >> moveEphemeron: ephemeron destinationIndex: destIndex [
numRememberedEphemerons := numRememberedEphemerons + 1
]

{ #category : #accessing }
SpurRememberedSet >> moveLastObjectTo: anIndex [

rememberedSetArray
at: anIndex put: (rememberedSetArray at: rememberedSetSize - 1)
]

{ #category : #accessing }
SpurRememberedSet >> numRememberedEphemerons [
^ numRememberedEphemerons
Expand Down
2 changes: 0 additions & 2 deletions smalltalksrc/VMMakerTests/VMInterpreterTests.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,6 @@ VMInterpreterTests >> setUp [

self initializeOldSpaceForScavenger.




]

Expand Down
2 changes: 1 addition & 1 deletion smalltalksrc/VMMakerTests/VMPrimitiveTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -4414,7 +4414,7 @@ VMPrimitiveTest >> testPrimitiveSnapshotContextsShouldBeTenured [
{ #category : #'tests - snapshot' }
VMPrimitiveTest >> testPrimitiveSnapshotCreateImage [

| method file |
| method |
interpreter pluginList: #( ).
self initializeOldSpaceForFullGC.
self setContextClassIntoClassTable.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,6 @@ VMSpurInitializedOldSpaceTest >> setUp [
self initializeOldSpaceForFullGC.
memory lastHash: 1.
memory classByteArray: (self newClassInOldSpaceWithSlots: 0 instSpec: (memory byteFormatForNumBytes: 0)).
memory setPermSpaceDirty: false.
]

{ #category : #helpers }
Expand Down
2 changes: 1 addition & 1 deletion smalltalksrc/VMMakerTests/VMSpurMemoryManagerTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ VMSpurMemoryManagerTest >> setContextClassIntoClassTable [
| aClass |
aClass := self
newClassInOldSpaceWithSlots: 0
instSpec: Array instSpec.
instSpec: Context instSpec.
memory setHashBitsOf: aClass to: ClassMethodContextCompactIndex.
memory
storePointer: ClassMethodContextCompactIndex
Expand Down

0 comments on commit fe7dab6

Please sign in to comment.