-
Notifications
You must be signed in to change notification settings - Fork 67
/
SpurHybridCompactor.class.st
108 lines (92 loc) · 2.95 KB
/
SpurHybridCompactor.class.st
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
"
A SpurHybridCompactor is a compactor that uses SpurSelectiveCompactor for normal GC compactions, but uses SpurPlanningCompactor for snapshot.
Instance Variables
planNotSelect: <Boolean>
planningCompactor: <SpurPlanningCompactor>
selectiveCompactor: <SpurSelectiveCompactor>
planNotSelect
- the boolean that selects between the two compactors; if true it chooses SpurPlanningCompactor
planningCompactor
- the SpurPlanningCompactor
selectiveCompactor
- the SpurSelectiveCompactor
"
Class {
#name : #SpurHybridCompactor,
#superclass : #SpurCompactor,
#instVars : [
'planningCompactor',
'selectiveCompactor',
'planNotSelect'
],
#category : #'VMMaker-SpurMemoryManager'
}
{ #category : #translation }
SpurHybridCompactor class >> classesForTranslation [
^{ SpurPlanningCompactor.
SpurSelectiveCompactor.
SpurSweeper }, super classesForTranslation
]
{ #category : #translation }
SpurHybridCompactor class >> declareCVarsIn: aCCodeGenerator [
aCCodeGenerator
staticallyResolvedPolymorphicReceiver: 'planningCompactor' to: SpurPlanningCompactor;
staticallyResolvedPolymorphicReceiver: 'selectiveCompactor' to: SpurSweeper"SpurSelectiveCompactor" "The selector mangling is easier this way"
]
{ #category : #api }
SpurHybridCompactor >> biasForGC [
<inline: true>
planNotSelect := false.
selectiveCompactor biasForGC
]
{ #category : #api }
SpurHybridCompactor >> biasForSnapshot [
planNotSelect := true.
planningCompactor biasForSnapshot
]
{ #category : #initialization }
SpurHybridCompactor >> coInterpreter: aVMSimulator [
<doNotGenerate>
super coInterpreter: aVMSimulator.
planningCompactor coInterpreter: aVMSimulator.
selectiveCompactor coInterpreter: aVMSimulator
]
{ #category : #api }
SpurHybridCompactor >> compact [
planNotSelect
ifTrue: [planningCompactor compact]
ifFalse: [selectiveCompactor compact]
]
{ #category : #initialization }
SpurHybridCompactor >> manager: aSpurNBitMMXEndianSimulator [
<doNotGenerate>
super manager: aSpurNBitMMXEndianSimulator.
(planningCompactor ifNil: [planningCompactor := SpurPlanningCompactor simulatorClass new])
manager: aSpurNBitMMXEndianSimulator.
(selectiveCompactor ifNil: [selectiveCompactor := SpurSelectiveCompactor simulatorClass new])
manager: aSpurNBitMMXEndianSimulator.
planNotSelect := false
]
{ #category : #api }
SpurHybridCompactor >> remapObj: objOop [
<api>
<inline: false>
planNotSelect ifTrue:
[^manager slidingCompactionRemapObj: objOop].
^super remapObj: objOop
]
{ #category : #initialization }
SpurHybridCompactor >> scavenger: aSpurGenerationScavenger [
<doNotGenerate>
super scavenger: aSpurGenerationScavenger. "I always thought the scavenger was super..."
planningCompactor scavenger: aSpurGenerationScavenger.
selectiveCompactor scavenger: aSpurGenerationScavenger
]
{ #category : #api }
SpurHybridCompactor >> shouldRemapObj: objOop [
<api>
<inline: false>
planNotSelect ifTrue:
[^manager slidingCompactionShouldRemapObj: objOop].
^super shouldRemapObj: objOop
]