[Vm-dev] VM Maker: VMMaker.oscog-eem.483.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Oct 30 02:00:38 UTC 2013
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.483.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.483
Author: eem
Time: 29 October 2013, 6:57:29.448 pm
UUID: 2b2db56c-c062-41fe-81fa-f872365cde4f
Ancestors: VMMaker.oscog-eem.482
Fix bug in eliminateAndFreeForwarders that forgot to free the last
run of forwarded objects in the final sweep.
=============== Diff against VMMaker.oscog-eem.482 ===============
Item was changed:
----- Method: SpurMemoryManager>>eliminateAndFreeForwarders (in category 'gc - global') -----
eliminateAndFreeForwarders
"As the final phase of global garbage collect, sweep
the heap to follow forwarders, then free forwarders"
| lowestForwarded firstForwarded lastForwarded |
self assert: (self isForwarded: nilObj) not.
self assert: (self isForwarded: falseObj) not.
self assert: (self isForwarded: trueObj) not.
self assert: (self isForwarded: hiddenRootsObj) not.
(self isForwarded: specialObjectsOop) ifTrue:
[specialObjectsOop := self followForwarded: specialObjectsOop].
scavenger followRememberedForwardersAndForgetFreeObjects.
self doScavenge: TenureByAge.
lowestForwarded := 0.
"sweep, following forwarders in all live objects, and finding the first forwarder."
self allOldSpaceObjectsDo:
[:o|
(self isForwarded: o)
ifTrue:
[lowestForwarded = 0 ifTrue:
[lowestForwarded := o]]
ifFalse:
[0 to: (self numPointerSlotsOf: o) - 1 do:
[:i| | f |
f := self fetchPointer: i ofObject: o.
(self isOopForwarded: f) ifTrue:
[f := self followForwarded: f.
self assert: ((self isImmediate: f) or: [self isYoung: f]) not.
self storePointerUnchecked: i ofObject: o withValue: f]]]].
firstForwarded := lastForwarded := 0.
"sweep from lowest forwarder, coalescing runs of forwarders."
self allOldSpaceObjectsFrom: lowestForwarded do:
[:o|
(self isForwarded: o)
ifTrue:
[firstForwarded = 0 ifTrue:
[firstForwarded := o].
lastForwarded := o]
ifFalse:
[firstForwarded ~= 0 ifTrue:
[| start bytes |
+ start := self startOfObject: firstForwarded.
+ bytes := (self addressAfter: lastForwarded) - start.
+ self addFreeChunkWithBytes: bytes at: start].
+ firstForwarded := 0]].
+ firstForwarded ~= 0 ifTrue:
+ [| start bytes |
+ start := self startOfObject: firstForwarded.
+ bytes := (self addressAfter: lastForwarded) - start.
+ self addFreeChunkWithBytes: bytes at: start].!
- start := self startOfObject: firstForwarded.
- bytes := (self addressAfter: lastForwarded) - start.
- self addFreeChunkWithBytes: bytes at: start].
- firstForwarded := 0]]!
More information about the Vm-dev
mailing list