190 likes | 352 Views
GC Algorithm inside .NET Luo Bingqiao 5/22/2009. Agenda. 经典基本垃圾回收算法 CLR 中垃圾回收算法介绍 SSCLI 中 Garbage Collection 源码分析. 经典基本垃圾回收算法. Reference Counting 算法 Mark-Sweep 与 Mark-Sweep-Compact 算法 Copying 算法. Reference Counting 算法. Storing the Number of reference, Pointers, and resource such
E N D
GC Algorithm inside .NET Luo Bingqiao 5/22/2009
Agenda 经典基本垃圾回收算法 CLR中垃圾回收算法介绍 SSCLI中Garbage Collection源码分析
经典基本垃圾回收算法 Reference Counting算法 Mark-Sweep与Mark-Sweep-Compact算法 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 • 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
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.
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
More Information • External ISMM forum <<Garbage Collection>>, Algorithms for automatic Dynamic Memory managements • Email lbq1221119@hotmail.com