Log In
Or create an account -> 
Imperial Library
  • Home
  • About
  • News
  • Upload
  • Forum
  • Help
  • Login/SignUp

Index
Cover Half Title Title Page Copyright Page Dedication Table of Contents List of Algorithms List of Figures List of Tables Preface Acknowledgements Authors 1 Introduction
1.1 Explicit deallocation 1.2 Automatic dynamic memory management 1.3 Comparing garbage collection algorithms
Safety Throughput Completeness and promptness Pause time Space overhead Optimisations for specific languages Scalability and portability
1.4 A performance disadvantage? 1.5 Experimental methodology 1.6 Terminology and notation
The heap The mutator and the collector The mutator roots References, fields and addresses Liveness, correctness and reachability Pseudo-code The allocator Mutator read and write operations Atomic operations Sets, multisets, sequences and tuples
2 Mark-sweep garbage collection
2.1 The mark-sweep algorithm 2.2 The tricolour abstraction 2.3 Improving mark-sweep 2.4 Bitmap marking 2.5 Lazy sweeping 2.6 Cache misses in the marking loop 2.7 Issues to consider
Mutator overhead Throughput Space usage To move or not to move?
3 Mark-compact garbage collection
3.1 Two-finger compaction 3.2 The Lisp 2 algorithm 3.3 Threaded compaction 3.4 One-pass algorithms 3.5 Issues to consider
Is compaction necessary? Throughput costs of compaction Long-lived data Locality Limitations of mark-compact algorithms
4 Copying garbage collection
4.1 Semispace copying collection
Work list implementations An example
4.2 Traversal order and locality 4.3 Issues to consider
Allocation Space and locality Moving objects
5 Reference counting
5.1 Advantages and disadvantages of reference counting 5.2 Improving efficiency 5.3 Deferred reference counting 5.4 Coalesced reference counting 5.5 Cyclic reference counting 5.6 Limited-field reference counting 5.7 Issues to consider
The environment Advanced solutions
6 Comparing garbage collectors
6.1 Throughput 6.2 Pause time 6.3 Space 6.4 Implementation 6.5 Adaptive systems 6.6 A unified theory of garbage collection
Abstract garbage collection Tracing garbage collection Reference counting garbage collection
7 Allocation
7.1 Sequential allocation 7.2 Free-list allocation
First-fit allocation Next-fit allocation Best-fit allocation Speeding free-list allocation
7.3 Fragmentation 7.4 Segregated-fits allocation
Fragmentation Populating size classes
7.5 Combining segregated-fits with first-, best- and next-fit 7.6 Additional considerations
Alignment Size constraints Boundary tags Heap parsability Locality Wilderness preservation Crossing maps
7.7 Allocation in concurrent systems 7.8 Issues to consider
8 Partitioning the heap
8.1 Terminology 8.2 Why to partition
Partitioning by mobility Partitioning by size Partitioning for space Partitioning by kind Partitioning for yield Partitioning for responsiveness Partitioning for locality Partitioning by thread Partitioning by availability Partitioning by mutability
8.3 How to partition 8.4 When to partition
9 Generational garbage collection
9.1 Example 9.2 Measuring time 9.3 Generational hypotheses 9.4 Generations and heap layout 9.5 Multiple generations 9.6 Age recording
En masse promotion Aging semispaces Survivor spaces and flexibility
9.7 Adapting to program behaviour
Appel-style garbage collection Feedback controlled promotion
9.8 Inter-generational pointers
Remembered sets Pointer direction
9.9 Space management 9.10 Older-first garbage collection 9.11 Beltway 9.12 Analytic support for generational collection 9.13 Issues to consider 9.14 Abstract generational garbage collection
10 Other partitioned schemes
10.1 Large object spaces
The Treadmill garbage collector Moving objects with operating system support Pointer-free objects
10.2 Topological collectors
Mature object space garbage collection Connectivity-based garbage collection Thread-local garbage collection Stack allocation Region inferencing
10.3 Hybrid mark-sweep, copying collectors
Garbage-First Immix and others Copying collection in a constrained memory space
10.4 Bookmarking garbage collection 10.5 Ulterior reference counting 10.6 Issues to consider
11 Run-time interface
11.1 Interface to allocation
Speeding allocation Zeroing
11.2 Finding pointers
Conservative pointer finding Accurate pointer finding using tagged values Accurate pointer finding in objects Accurate pointer finding in global roots Accurate pointer finding in stacks and registers Accurate pointer finding in code Handling interior pointers Handling derived pointers
11.3 Object tables 11.4 References from external code 11.5 Stack barriers 11.6 GC-safe points and mutator suspension 11.7 Garbage collecting code 11.8 Read and write barriers
Engineering Precision of write barriers Hash tables Sequential store buffers Overflow action Card tables Crossing maps Summarising cards Hardware and virtual memory techniques Write barrier mechanisms: in summary Chunked lists
11.9 Managing address space 11.10 Applications of virtual memory page protection
Double mapping Applications of no-access pages
11.11 Choosing heap size 11.12 Issues to consider
12 Language-specific concerns
12.1 Finalisation
When do finalisers run? Which thread runs a finaliser? Can finalisers run concurrently with each other? Can finalisers access the object that became unreachable? When are finalised objects reclaimed? What happens if there is an error in a finaliser? Is there any guaranteed order to finalisation? The finalisation race problem Finalisers and locks Finalisation in particular languages For further study
12.2 Weak references
Additional motivations Supporting multiple pointer strengths Using Phantom objects to control finalisation order Race in weak pointer clearing Notification of weak pointer clearing Weak pointers in other languages
12.3 Issues to consider
13 Concurrency preliminaries
13.1 Hardware
Processors and threads Interconnect Memory Caches Coherence Cache coherence performance example: spin locks
13.2 Hardware memory consistency
Fences and happens-before Consistency models
13.3 Hardware primitives
Compare-and-swap Load-linked/store-conditionally Atomic arithmetic primitives Test then test-and-set More powerful primitives Overheads of atomic primitives
13.4 Progress guarantees
Progress guarantees and concurrent collection
13.5 Notation used for concurrent algorithms 13.6 Mutual exclusion 13.7 Work sharing and termination detection
Rendezvous barriers
13.8 Concurrent data structures
Concurrent stacks Concurrent queue implemented with singly linked list Concurrent queue implemented with array A concurrent deque for work stealing
13.9 Transactional memory
What is transactional memory? Using transactional memory to help implement collection Supporting transactional memory in the presence of garbage collection
13.10 Issues to consider
14 Parallel garbage collection
14.1 Is there sufficient work to parallelise? 14.2 Load balancing 14.3 Synchronisation 14.4 Taxonomy 14.5 Parallel marking
Processor-centric techniques
14.6 Parallel copying
Processor-centric techniques Memory-centric techniques
14.7 Parallel sweeping 14.8 Parallel compaction 14.9 Issues to consider
Terminology Is parallel collection worthwhile? Strategies for balancing loads Managing tracing Low-level synchronisation Sweeping and compaction Termination
15 Concurrent garbage collection
15.1 Correctness of concurrent collection
The tricolour abstraction, revisited The lost object problem The strong and weak tricolour invariants Precision Mutator colour Allocation colour Incremental update solutions Snapshot-at-the-beginning solutions
15.2 Barrier techniques for concurrent collection
Grey mutator techniques Black mutator techniques Completeness of barrier techniques Concurrent write barrier mechanisms One-level card tables Two-level card tables Reducing work
15.3 Issues to consider
16 Concurrent mark-sweep
16.1 Initialisation 16.2 Termination 16.3 Allocation 16.4 Concurrent marking and sweeping 16.5 On-the-fly marking
Write barriers for on-the-fly collection Doligez-Leroy-Gonthier Doligez-Leroy-Gonthier for Java Sliding views
16.6 Abstract concurrent collection
The collector wavefront Adding origins Mutator barriers Precision Instantiating collectors
16.7 Issues to consider
17 Concurrent copying & compaction
17.1 Mostly-concurrent copying: Baker’s algorithm
Mostly-concurrent, mostly-copying collection
17.2 Brooks’s indirection barrier 17.3 Self-erasing read barriers 17.4 Replication copying 17.5 Multi-version copying
Extensions to avoid copy-on-write
17.6 Sapphire
Collector phases Merging phases Volatile fields
17.7 Concurrent compaction
Compressor Pauseless
17.8 Issues to consider
18 Concurrent reference counting
18.1 Simple reference counting revisited 18.2 Buffered reference counting 18.3 Concurrent, cyclic reference counting 18.4 Taking a snapshot of the heap 18.5 Sliding views reference counting
Age-oriented collection The algorithm Sliding views cycle reclamation Memory consistency
18.6 Issues to consider
19 Real-time garbage collection
19.1 Real-time systems 19.2 Scheduling real-time collection 19.3 Work-based real-time collection
Parallel, concurrent replication Uneven work and its impact on work-based scheduling
19.4 Slack-based real-time collection
Scheduling the collector work Execution overheads Programmer input
19.5 Time-based real-time collection: Metronome
Mutator utilisation Supporting predictability Analysis Robustness
19.6 Combining scheduling approaches: Tax-and-Spend
Tax-and-Spend scheduling Tax-and-Spend prerequisites
19.7 Controlling fragmentation
Incremental compaction in Metronome Incremental replication on uniprocessors Stopless: lock-free garbage collection Staccato: best-effort compaction with mutator wait-freedom Chicken: best-effort compaction with mutator wait-freedom for x86 Clover: guaranteed compaction with probabilistic mutator lock-freedom Stopless versus Chicken versus Clover Fragmented allocation
19.8 Issues to consider
Glossary Bibliography Index
  • ← Prev
  • Back
  • Next →
  • ← Prev
  • Back
  • Next →

Chief Librarian: Las Zenow <zenow@riseup.net>
Fork the source code from gitlab
.

This is a mirror of the Tor onion service:
http://kx5thpx2olielkihfyo4jgjqfb7zx7wxr3sd4xzt26ochei4m6f7tayd.onion