垃圾回收机制(GC)趣谈

呵呵最近看一本书上面对垃圾回收机制进行了一个比较有趣的讲解-用餐巾纸来作为例子,觉得不错,特抄到这上面(自己打字真慢啊)

  • 引用计数算法(Reference Counting)
    午餐时,突然需要一个餐巾纸来写点东西,这个时候呢,我需要先在餐巾纸上角化一个计数1,表示你在使用这个餐巾纸,如果同时你要用或者看这个餐巾纸,就要在餐巾纸上计数加1,也就是2,表示同时有2个人在用。看完后,计数要相应的减1,表示你已经使用结束了。最后如果这个餐巾纸被用完无用的时候,他的计数相应的也就是0了,这个时候餐厅的机器人就可以把它扔到垃圾箱了。
  • 标记-清除算法(Mark-Sweep)
    午餐时,餐厅上所有的人都据自己的需要来取用餐巾纸。当机器人向收集不用的餐巾纸时,它让所有的用餐者停下来,依次询问餐厅的每一个人:“你正在使用餐巾纸吗?你用的那一个餐巾纸?”根据人的回答在每个餐巾纸上标上记号。询问结束,没有标上记号的餐巾纸,把它们统统扔在垃圾箱。
  • 复制算法(Copying)
    机器人把餐厅分为南北两个完全相同的区。午餐时,所有人都现在南边的区吃饭(何合能容纳吃饭的人数也少了一半),用餐时随便使用餐巾纸。当到了机器人觉得有必要进行垃圾清理的时候呢,就要所有在南边吃饭的人以最快的速度跑到北边(当然要戴上你在使用的餐巾纸),OK,等所有都到北边去的时候,机器人把南边的餐巾纸收集一下就完成任务了。
    下一次进行收集的时候,就重复上面的过程,你就在两边慢慢跑了。
  • 标记-整理算法(Mark-Compact)
    这个是标记-清除算法和复制算法的结合。
    这一次呢,还是在那个餐厅里面,机器人不分区了。在执行垃圾收集的时候、机器人先执行标记-清除算法的第一步,为所有的被使用的餐巾纸打上标记,然后,机器人名利所有人戴上有标记餐巾纸去南边,而把没有标记的餐巾纸扔到北边。这样就ok了
  • 增量收集算法(Incremental Collecting)
    这个算法是机器人在人们用餐的同时寻找废弃的餐巾纸并收集回收
  • 分代收集算法(Generational Collecting)
    如果这个餐厅的bot很聪明,能实现摸清餐厅吃饭的人用餐巾纸的习惯-有人吃顿饭只用一张而有人要用2张,那么就可以据此制定出完善的回收计划了,并在人们刚扔掉餐巾纸的时候把垃圾捡走

Leave a Reply