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
| atomic collect():
markFromRoots()
for each block in Blocks:
if not isMarked(block):
add(blockAllocator, block)
else:
add(reclaimList, block)
atomic allocate(sz):
result <- remove(sz)
if result == null:
lazySweep(sz)
result <- remove(sz)
return result
lazySweep(sz):
repeat
block <- nextBlock(reclainmList, sz)
if block != null:
sweep(start(block), end(block))
if spaceFound(block):
return
until block == null
allocSlow(sz)
allocSlow(sz):
block <- allocateBlock()
if block != null:
initialise(block, sz)
|