author:tuiye@126.com
以
MMgc
为例
一
垃圾收集
垃圾收集(Garbage Collection,GC)是一种自动打扫和清除内存垃圾的技术,它可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发的内存耗尽,以及不恰当的内存释放所造成的内存非法引用。计算机语言中,很多利用了这一技术来自动管理与之相关联的内存的清除,如Java,Perl,Python,Ruby,JavaScript等。但各自的机制不尽相同,例如Java是比较复杂的自适应GC技术,囊括Mark-Sweep,增量算法(Incremental Algorithm)等;Perl为引用计数(Count Reference);Python采用分代机制(Generation Algorithm);Ruby是标记清除(Mark-Sweep);JavaScript的不同引擎采用的迥异,Spider monkey是标记清除(Mark-Sweep),而Tamarin是又在此之上增加了增量算法。
以上基本囊括了比较流行的GC算法,除此之外还有复制(Copying)算法与标记整理(Mark-Compact)算法等。这些算法各自有自身的优势,有的实现简单,有的回收及时(也可说内存峰值可以保持在较低水准),还有些可以用于实时系统(即每次收集不会占用很大CPU时间,造成停顿感),因此对于不同需求有应采用不同的方式。譬如一个需要
进行实时垃圾收集的运行环境采用增量收集是一个比较好的选择。
二
增量算法理论与三元色机制