Garbage Collection Mechnism concepts 垃圾回收机制简介
传统的垃圾回收机制
1.引用计数(reference counting,RC)算法
1960年以前,人们为胚胎中的LISP语言设计垃圾回收机制时,第一个想到的算法就是引用计数算法。拿餐巾纸的例子来说
午餐时,为了把脑子里突然跳出来的设机灵感记下来,我从餐巾纸代中抽出一张餐巾纸,打算在上面画出系统构架的蓝图。按照“餐巾纸使用之引用计数版“的要求,画图之前,我必须事先在餐巾纸的一角写上计数值1,以表示我在使用这张餐巾纸,这是,如果你也想看我的餐巾纸,那你就必须把餐巾纸上的计数值改为2,表示2个人在使用这张餐巾纸。你看完之后,必须把计数值减1。同样,当我把餐巾纸使用完之后,餐巾纸上的计数值就变为0。此时,他会被垃圾回收器捡起来扔到垃圾箱里。
引用计算法的缺点和优点很明显。这一算法在执行垃圾收集任务时候速度较快,但是算法对程序中每一次内存分配和指针操作提出了额外的要求。跟重要的是,RC无法正确释放循环引用的内存块。
2.标记-清除(Mark-Sweep,MS)算法
仍然以餐巾纸为例:
午餐过程中,餐厅里的所有人都根据自己的需要取用餐巾纸。当垃圾回收机器人想收集废旧餐巾纸的时候,他会让所有用餐的人先停下来,然后,依次询问餐厅里的每一个人:“你正在用餐巾纸吗?你用的是哪一张餐巾纸“机器人根据每个人的回答将人们正在使用的餐巾纸画上标号。询问过程结束后,机器人在餐厅里面寻找所有散落在餐桌上并且还没有标号的餐巾纸,把他们统统扔到垃圾箱里面。
正如其名所暗示的那样,标记-清除算法的执行过程分为标记和清除两大阶段。
3.复制(copying)算法
cont...
1.引用计数(reference counting,RC)算法
1960年以前,人们为胚胎中的LISP语言设计垃圾回收机制时,第一个想到的算法就是引用计数算法。拿餐巾纸的例子来说
午餐时,为了把脑子里突然跳出来的设机灵感记下来,我从餐巾纸代中抽出一张餐巾纸,打算在上面画出系统构架的蓝图。按照“餐巾纸使用之引用计数版“的要求,画图之前,我必须事先在餐巾纸的一角写上计数值1,以表示我在使用这张餐巾纸,这是,如果你也想看我的餐巾纸,那你就必须把餐巾纸上的计数值改为2,表示2个人在使用这张餐巾纸。你看完之后,必须把计数值减1。同样,当我把餐巾纸使用完之后,餐巾纸上的计数值就变为0。此时,他会被垃圾回收器捡起来扔到垃圾箱里。
引用计算法的缺点和优点很明显。这一算法在执行垃圾收集任务时候速度较快,但是算法对程序中每一次内存分配和指针操作提出了额外的要求。跟重要的是,RC无法正确释放循环引用的内存块。
2.标记-清除(Mark-Sweep,MS)算法
仍然以餐巾纸为例:
午餐过程中,餐厅里的所有人都根据自己的需要取用餐巾纸。当垃圾回收机器人想收集废旧餐巾纸的时候,他会让所有用餐的人先停下来,然后,依次询问餐厅里的每一个人:“你正在用餐巾纸吗?你用的是哪一张餐巾纸“机器人根据每个人的回答将人们正在使用的餐巾纸画上标号。询问过程结束后,机器人在餐厅里面寻找所有散落在餐桌上并且还没有标号的餐巾纸,把他们统统扔到垃圾箱里面。
正如其名所暗示的那样,标记-清除算法的执行过程分为标记和清除两大阶段。
3.复制(copying)算法
cont...