垃圾回收

先上两篇文章:

1)C#技术漫谈之垃圾回收机制(GC):http://kb.cnblogs.com/page/106720/

2)各种垃圾回收算法的通俗解释:http://jimoxiang.com/baiduspacearch/blog/blog/544606118.html

里面有不少有用的说明。顺带Google一下Java/C#垃圾回收等关键字,大致浏览,好习惯。

大道至简一下:

0)垃圾回收是回收内存堆上的对象。

1)垃圾回收可以分两步: 先识别垃圾,然后回收垃圾。

2)基本的垃圾回收算法:

  引用计数——使用这个数来识别垃圾,识别出后回收。(引用数=0的对象为垃圾,回收他们。)

  标记清除——标记即识别垃圾,清除即回收。(不可达的对象标记为垃圾,清除他们。)【可达图上的结点均不是垃圾,垃圾是零散结点。】

  标记清除压缩——(多压缩一下,整理一下空间。)

  复制——A段空间,B段空间。将非垃圾对象从A复制到B,然后清空A。

3)分代框架:

  假设分为3代,如图示。每代有一段空间,设想 [1->2->3] 为一漏斗。

  每次回收时,均回收1代。1代空间中的垃圾被收回,非垃圾对象落入2代。

  隔一小段时间,回收一下2代。2代空间的垃圾被收回,非垃圾对象落入3代。

  隔一大段时间,回收一下3代。3代空间的垃圾被收回,非垃圾对象保留。

4)理解事物本身语义,并尝试探究背后的原理。非宏观的具体垃圾回收的实现,需要源码(如Java Hotspot)。

 

原文地址:https://www.cnblogs.com/jiejue/p/2809202.html