GC Algorithm inside.NET Luo Bingqiao 5/22/2009
Agenda 1. 经典基本垃圾回收算法 2.CLR 中垃圾回收算法介绍 3.SSCLI 中 Garbage Collection 源码分析
经典基本垃圾回收算法 1.Reference Counting 算法 2.Mark-Sweep 与 Mark-Sweep-Compact 算法 3.Copying 算法
Reference Counting 算法 Storing the Number of reference, Pointers, and resource such as an Object or Memory block. Simple reference counting Deferred reference counting One-bit reference counting Weighted reference counting
Reference Counting 算法 Advantages and Disadvantages Reclaim objects promptly Difficult to resolve circular references RC=1 Examples of Use: COM, Cocoa, Delphi, PHP, Python
Mark-Sweep Initially, allocate objects on the heap sequentially At some stage, mark the objects that are dead and can be removed Free the dead object slots at some stage
Mark-Sweep Advantages and Disadvantages Minimal house-keeping overhead (just one free list) Every allocation request requires a walk thru the free list, makes allocations slow Heap fragmentation Examples of Use: C Runtime Heap,.NET Micro Framework
Copy and Collect Keep two heaps Allocate only from one heap When collection is triggered on the heap, copy all alive objects to the second heap Switch the roles of heaps
Copy and Collect Advantages and Disadvantages Conceptual Simplicity Copy operation needs to be done for all objects Blocks a lot of memory unnecessarily
What happens in CLR and JVM?
GC Algorithms in advanced OO language VMS Mark Sweep Compact / Train algorithm Generational incremental Collector Large Object Heap Segments Finalization in CLR Weak References Pinning Object Layout
Heap Organization Heap organization for the train algorithm.
Overall of GC Algorithm Mark bit set, and if required Pin bit also set Mark Grow or shrink the heap as needed Plan Put all dead objects on a free list Sweep Only for a Compacting Collection Relocate Objects are moved to the new addresses Compact
Mark Phase:
Mark Phase Separate the live objects from dead objects for the generation being collected. All small dead objects have their Mark bit set, and if required Pin bit also set Finalizable objects are put on the FReachable queue Weak pointers to dead objects are nulled All large dead objects are put on the FreeList
Sweep Phase: Put all dead objects on a free list
Managed Heap after Compact:
Finalization Internals
More Information External ISMM forum >, Algorithms for automatic Dynamic Memory managements