Skip to content

Commit

Permalink
Reintroducing the difference of ReallyYoung and isReallyYoungObject
Browse files Browse the repository at this point in the history
  • Loading branch information
tesonep committed May 3, 2022
1 parent b3270b4 commit 7e2e029
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 15 deletions.
4 changes: 2 additions & 2 deletions smalltalksrc/VMMaker/Cogit.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -4405,7 +4405,7 @@ Cogit >> checkIfValidOopRefAndTarget: annotation pc: mcpc cogMethod: cogMethod [
(self asserta: (objectRepresentation checkValidOopReference: literal)) ifFalse:
[^1].
((objectRepresentation couldBeObject: literal)
and: [objectMemory getMemoryMap isYoungObject: literal]) ifTrue:
and: [objectMemory isReallyYoungObject: literal]) ifTrue:
[(self asserta: (self cCoerceSimple: cogMethod to: #'CogMethod *') cmRefersToYoung) ifFalse:
[^2]]].
Expand All @@ -4425,7 +4425,7 @@ Cogit >> checkIfValidOopRefAndTarget: annotation pc: mcpc cogMethod: cogMethod [
[(self asserta: (objectRepresentation validInlineCacheTag: cacheTag)) ifFalse:
[^5]].
((objectRepresentation couldBeObject: cacheTag)
and: [objectMemory getMemoryMap isYoungObject: cacheTag]) ifTrue:
and: [objectMemory isReallyYoungObject: cacheTag]) ifTrue:
[(self asserta: (self cCoerceSimple: cogMethod to: #'CogMethod *') cmRefersToYoung) ifFalse:
[^6]]]
ifFalse:
Expand Down
8 changes: 4 additions & 4 deletions smalltalksrc/VMMaker/SpurGenerationScavenger.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ SpurGenerationScavenger >> copyToOldSpace: survivor bytes: bytesInObject format:
manager baseHeaderSize to: bytesInObject - (survivor - startOfSurvivor) - manager wordSize by: manager wordSize do:
[:p| | field |
field := manager longAt: survivor + p.
(manager isYoung: field) ifTrue:
(manager isReallyYoung: field) ifTrue:
[rememberedSet remember: newOop.
^newOop]]].
^newOop
Expand Down Expand Up @@ -669,7 +669,7 @@ SpurGenerationScavenger >> isScavengeSurvivor: oop [
(manager isForwarded: oop)
ifTrue: [target := manager followForwarded: oop]
ifFalse: [target := oop].
^(manager isYoung: target) not
^(manager isReallyYoung: target) not
or: [manager isInFutureSpace: target]
]

Expand Down Expand Up @@ -880,7 +880,7 @@ SpurGenerationScavenger >> processWeakSurvivor: weakObj [
[(manager isForwarded: referent) ifTrue:
[referent := manager followForwarded: referent.
"weakObj is either young or already in remembered table; no need to check"
self assert: ((manager getMemoryMap isYoungObject: weakObj)
self assert: ((manager isReallyYoungObject: weakObj)
or: [manager isRemembered: weakObj]).
manager storePointerUnchecked: i ofObject: weakObj withValue: referent].
(self isMaybeOldScavengeSurvivor: referent)
Expand Down Expand Up @@ -1116,7 +1116,7 @@ SpurGenerationScavenger >> scavengeReferentsOf: referrer [
["a forwarding pointer could be because of become: or scavenging."
(manager isForwarded: referent) ifTrue:
[referent := manager followForwarded: referent].
(manager getMemoryMap isYoungObject: referent)
(manager isReallyYoungObject: referent)
ifTrue: "if target is already in future space forwarding pointer was due to a become:."
[(manager isInFutureSpace: referent)
ifTrue: [newLocation := referent. foundNewReferentOrIsWeakling := true]
Expand Down
22 changes: 17 additions & 5 deletions smalltalksrc/VMMaker/SpurMemoryManager.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -3305,7 +3305,7 @@ SpurMemoryManager >> checkHeapIntegrity: excludeUnmarkedObjs classIndicesShouldB
[coInterpreter print: 'object leak in forwarder '; printHex: obj; print: ' to unmapped '; printHex: fieldOop; cr.
self eek.
ok := false].
(self isYoung: fieldOop) ifTrue:
(self isReallyYoung: fieldOop) ifTrue:
[containsYoung := true]]
ifFalse:
[classOop := self classOrNilAtIndex: (classIndex := self classIndexOf: obj).
Expand All @@ -3324,7 +3324,7 @@ SpurMemoryManager >> checkHeapIntegrity: excludeUnmarkedObjs classIndicesShouldB
self eek.
ok := false].
"don't be misled by CogMethods; they appear to be young, but they're not"
(self isYoung: fieldOop) ifTrue:
(self isReallyYoung: fieldOop) ifTrue:
[containsYoung := true]]]].
containsYoung ifTrue:
[(self isRemembered: obj) ifFalse:
Expand Down Expand Up @@ -7446,6 +7446,18 @@ SpurMemoryManager >> isPureBitsNonImm: objOop [
^self isPureBitsFormat: (self formatOf: objOop)
]
{ #category : #'object testing' }
SpurMemoryManager >> isReallyYoung: oop [
<api>
"Answer if oop is young."
^(self isNonImmediate: oop)
and: [self isReallyYoungObject: oop]
]
{ #category : #'header access' }
SpurMemoryManager >> isRemembered: objOop [
^((self baseHeader: objOop) >> self rememberedBitShift bitAnd: 1) ~= 0
Expand Down Expand Up @@ -11477,7 +11489,7 @@ SpurMemoryManager >> slidingCompactionRemapObj: objOop [
gcPhaseInProgress > 0 ifTrue:
[self scavengeInProgress
ifTrue:
[((self isYoung: resolvedObj) "don't scavenge immediate, old, or CogMethod objects."
[((self isReallyYoung: resolvedObj) "don't scavenge immediate, old, or CogMethod objects."
and: [(self isInFutureSpace: resolvedObj) not]) ifTrue:
[^scavenger copyAndForward: resolvedObj]]
ifFalse:
Expand Down Expand Up @@ -12750,7 +12762,7 @@ SpurMemoryManager >> vanillaRemapObj: objOop [
[self deny: (self isInFutureSpace: objOop).
resolvedObj := objOop].
(self scavengeInProgress
and: [(self isYoung: resolvedObj) "don't scavenge immediate, old, or CogMethod objects."
and: [(self isReallyYoung: resolvedObj) "don't scavenge immediate, old, or CogMethod objects."
and: [(self isInFutureSpace: resolvedObj) not]]) ifTrue:
[^scavenger copyAndForward: resolvedObj].
^resolvedObj
Expand All @@ -12765,7 +12777,7 @@ SpurMemoryManager >> vanillaShouldRemapObj: objOop [
scavenge, followed by a scan-mark-free, and final compaction passes may result in
scavenged fields being visited twice."
^(self isForwarded: objOop)
or: [(memoryMap isYoungObject: objOop)
or: [(memoryMap isReallyYoungObject: objOop)
and: [(self isInFutureSpace: objOop) not]]
]
Expand Down
2 changes: 1 addition & 1 deletion smalltalksrc/VMMaker/SpurRememberedSet.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ SpurRememberedSet >> referenceCountRememberedReferents: population maxRefCount:
0 to: (manager numPointerSlotsOf: elephant) - 1 do:
[:j| | referent refCount |
referent := manager fetchPointer: j ofObject: elephant.
(manager isYoung: referent) ifTrue:
(manager isReallyYoung: referent) ifTrue:
[refCount := manager rtRefCountOf: referent.
refCount < maxRefCount ifTrue:
[refCount > 0 ifTrue:
Expand Down
5 changes: 2 additions & 3 deletions smalltalksrc/VMMaker/VMMemoryMap.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -436,11 +436,10 @@ VMMemoryMap >> isPermanentObject: anOop [

{ #category : #'testing objects' }
VMMemoryMap >> isYoungObject: anOop [

<api>
self flag:#todo.
"^ anOop allMask: oldSpaceMask "
^ newSpaceStart <= anOop and: [ anOop <= newSpaceEnd ]

^ (anOop bitAnd: spaceMaskToUse) = newSpaceMask
]

{ #category : #accessing }
Expand Down

0 comments on commit 7e2e029

Please sign in to comment.