List of Figures
1.1
Premature deletion of an object may lead to errors
1.2
Minimum and bounded mutator utilisation curves
1.3
Roots, heap cells and references
2.1
Marking with the tricolour abstraction
2.2
Marking with a FIFO prefetch buffer
3.1
Edwards’s Two-Finger algorithm
3.2
Threading pointers
3.3
The heap and metadata used by Compressor
4.1
Copying garbage collection: an example
4.2
Copying a tree with different traversal orders
4.3
Moon’s approximately depth-first copying
4.4
A FIFO prefetch buffer does not improve locality with copying
4.5
Mark/cons ratios for mark-sweep and copying collection
5.1
Deferred reference counting schematic
5.2
Coalesced reference counting
5.3
Cyclic reference counting
5.4
The synchronous Recycler state transition diagram
6.1
A simple cycle
7.1
Sequential allocation
7.2
A Java object header design for heap parsability
9.1
Inter-generational pointers
9.2
Semispace organisation in a generational collector
9.3
Survival rates with a copy count of 1 or
9.4
Shaw’s bucket brigade system
9.5
High water marks
9.6
Appel’s simple generational collector
9.7
Switching between copying and marking the young generation
9.8
Renewal Older First garbage collection
9.9
Deferred Older First garbage collection
9.10
Beltway configurations
10.1
The Treadmill collector
10.2
The Train copying collector
10.3
A ‘futile’ collection
10.4
Thread-local heaplet organisation
10.5
A continuum of tracing collectors
10.6
Incremental incrementally compacting garbage collection
10.7
Allocation in immix
10.8
Mark-Copy
10.9
Ulterior reference counting schematic
11.1
Conservative pointer finding
11.2
Stack scanning
11.3
Crossing map with slot-remembering card table
11.4
A stack implemented as a chunked list
12.1
Failure to release a resource
12.2
Using a finaliser to release a resource
12.3
Object finalisation order
12.4
Restructuring to force finalisation order
12.5
Phantom objects and finalisation order
14.1
Stop-the-world garbage collection
14.2
A global overflow set
14.3
Grey packets
14.4
Dominant-thread tracing
14.5
Chunk management in the Imai and Tick collector
14.6
Block states and transitions in the Imai and Tick collector
14.7
Block states and transitions in the Siegwart and Hirzel collector
14.8
Sliding compaction in the Flood et al collector
14.9
Inter-block compaction in the Abuaiadh et al collector
15.1
Incremental and concurrent garbage collection
15.2
The lost object problem
16.1
Barriers for on-the-fly collectors
17.1
Compressor
17.2
Pauseless
18.1
Reference counting and races
18.2
Concurrent coalesced reference counting
18.3
Sliding views snapshot
19.1
Unpredictable frequency and duration of conventional collectors
19.2
Heap structure in the Blelloch and Cheng work-based collector
19.3
Low mutator utilisation even with short collector pauses
19.4
Heap structure in the Henriksson slack-based collector
19.5
Lazy evacuation in the Henriksson slack-based collector
19.6
Metronome utilisation
19.7
Overall mutator utilisation in Metronome
19.8
Mutator utilisation in Metronome during a collection cycle
19.9
MMU uT (Δt) for a perfectly scheduled time-based collector
19.10
Fragmented allocation in Schism