-
Notifications
You must be signed in to change notification settings - Fork 65
/
VMSpurNewSpaceStructureTest.class.st
166 lines (116 loc) · 5.56 KB
/
VMSpurNewSpaceStructureTest.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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
Class {
#name : #VMSpurNewSpaceStructureTest,
#superclass : #VMSpurMemoryManagerTest,
#category : #'VMMakerTests-MemoryTests'
}
{ #category : #'tests-2-instantiation' }
VMSpurNewSpaceStructureTest >> fillEden [
"Allocate enough objects to fill the eden."
1
to: memory scavenger eden size // self emptyObjectSize
do: [ :index | self newZeroSizedObject ]
]
{ #category : #'tests-2-instantiation' }
VMSpurNewSpaceStructureTest >> testInstantiateNewObjectMovesFreeStartAfterObject [
| freeStartBefore |
freeStartBefore := memory freeStart.
self newZeroSizedObject.
"New zero sized object has 64bit header + 1 * 64bit empty slot = 16bytes"
self assert: memory freeStart equals: freeStartBefore + self emptyObjectSize
]
{ #category : #'tests-2-instantiation' }
VMSpurNewSpaceStructureTest >> testInstantiateNewObjectWithSlotMovesFreeStartAfterObject [
| freeStartBefore |
freeStartBefore := memory freeStart.
self newObjectWithSlots: 0.
"New zero sized object has 64bit header + 1 * 64bit empty slot = 16bytes"
self assert: memory freeStart equals: freeStartBefore + self emptyObjectSize
]
{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryEdenEndIsAtTheStartOfOldSpace [
self assert: memory scavenger eden limit equals: memory getMemoryMap newSpaceEnd
]
{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryEdenIsRestOfNewSpace [
self
assert: memory scavenger eden size > (environmentBuilder newSpaceSize - memory scavenger pastSpace size - memory scavenger futureSpace size - interpreter interpreterAllocationReserveBytes)
]
{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryFreeStartIsEdenStart [
self assert: memory freeStart equals: memory scavenger eden start
]
{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryFutureSpaceEndIsAtTheStartOfEden [
self assert: memory scavenger futureSpace limit equals: memory scavenger eden start
]
{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryFutureSpaceIsRoughlyOneSeventhOfNewSpace [
self assert: memory scavenger futureSpace size equals: (environmentBuilder newSpaceSize // 7 truncateTo: memory allocationUnit)
]
{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryFutureSurvivorSpaceIsAtFutureSpaceStart [
"The future survivor start indicates during the execution of the scavenger, where the next free space in future space starts."
self assert: memory scavenger futureSurvivorStart equals: memory scavenger futureSpace start
]
{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryPastSpaceEndIsAtTheStartOfFutureSpace [
self assert: memory scavenger pastSpace limit equals: memory scavenger futureSpace start
]
{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryPastSpaceFreeStartIsAtPastSpaceStart [
" - pastSpaceStart points to where the free space in the past space starts => it **does** move
- scavenger pastSpace start points to the actual beginning of the past space => it does not move"
self assert: memory pastSpaceStart equals: memory scavenger pastSpace start
]
{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryPastSpaceIsAtTheStartOfNewSpace [
self assert: memory scavenger pastSpace start equals: memory getMemoryMap newSpaceStart
]
{ #category : #'tests-1-memory-initialization' }
VMSpurNewSpaceStructureTest >> testNewMemoryPastSpaceIsRoughlyOneSeventhOfNewSpace [
self assert: memory scavenger pastSpaceBytes equals: (environmentBuilder newSpaceSize // 7 truncateTo: memory allocationUnit)
]
{ #category : #'tests-2-instantiation' }
VMSpurNewSpaceStructureTest >> testNewObjectAfterEdenLimitThrowsError [
"Allocate enough objects to fill the eden."
self fillEden.
"Allocating one more object should not be allowed, and should throw an error"
[ self newZeroSizedObject.
"Fail the test if it does not raise an exception"
self fail ] on: Error do: [ :error |
self assert: error messageText equals: 'no room in eden for allocateNewSpaceSlots:format:classIndex:' ]
]
{ #category : #'tests-2-instantiation' }
VMSpurNewSpaceStructureTest >> testNewObjectInEdenDoesNotModifyFutureSpace [
| futureSpaceStartBefore |
futureSpaceStartBefore := memory scavenger futureSurvivorStart.
self newZeroSizedObject.
self assert: memory scavenger futureSurvivorStart equals: futureSpaceStartBefore
]
{ #category : #'tests-2-instantiation' }
VMSpurNewSpaceStructureTest >> testNewObjectInEdenDoesNotModifyPastSpace [
| pastSpaceStartBefore |
pastSpaceStartBefore := memory pastSpaceStart.
self newZeroSizedObject.
self assert: memory pastSpaceStart equals: pastSpaceStartBefore
]
{ #category : #'tests-2-instantiation' }
VMSpurNewSpaceStructureTest >> testNewObjectPositionIsBeforeObjectHeader [
| freeStartBefore oop |
freeStartBefore := memory freeStart.
oop := self newZeroSizedObject.
self assert: oop equals: freeStartBefore
]
{ #category : #'tests-2-instantiation' }
VMSpurNewSpaceStructureTest >> testNewObjectWithSlotsPositionIsBeforeObjectHeader [
| freeStartBefore oop |
freeStartBefore := memory freeStart.
oop := self newObjectWithSlots: 0.
self assert: oop equals: freeStartBefore
]
{ #category : #'tests-2-instantiation' }
VMSpurNewSpaceStructureTest >> testScavengeThresholdIsInsideTheEden [
self assert:(memory scavengeThreshold
between: memory scavenger eden start
and: memory scavenger eden limit)
]