
GC之前
说明:该文中的GC算法讲解不仅仅局限于某种具体开发语言。
mutator
mutator 是 Edsger Dijkstra 、 琢磨出来的词,有“改变某物”的意思。说到要改变什么,那就是 GC 对象间的引用关系。不过光这么说可能大家还是不能理解,其实用一句话概括的话,它的实体就是“应用程序”。这样说就容易理解了吧。GC 就是在这个 mutator 内部精神饱满地 工作着。
mutator 实际进行的操作有以下 2 种。
- 生成对象
- 更新指针
mutator 在进行这些操作时,会同时为应用程序的用户进行一些处理(数值计算、浏览网页、 编辑文章等)。随着这些处理的逐步推进,对象间的引用关系也会“改变”。伴随这些变化会 产生垃圾,而负责回收这些垃圾的机制就是 GC。
活动对象 / 非活动对象
我们将分配到内存空间中的对象中那些能通过 mutator 引用的对象称为“活动对象”。反 过来,把分配到堆中那些不能通过程序引用的对象称为“非活动对象”。
根
根(root)这个词的意思是“根基”“根底”。在 GC 的世界里,根是指向对象的指针的“起点” 部分。
这些都是能通过 mutator 直接引用的空间。
评价标准
评价 GC 算法的性能时,我们采用以下 4 个标准。
- 吞吐量
- 最大暂停时间
- 堆使用效率
- 访问的局部性
其他信息(Java语言为例):JVM解读-GC(垃圾回收)
1 标记-清除法
优点
①实现简单
说到 GC 标记 - 清除算法的优点,那当然要数算法简单,实现容易了。
另外,如果算法实现简单,那么它与其他算法的组合也就相应地简单。
②与保守式 GC 算法兼容
后面介绍的保守式 GC 算法中,对象是不能被移动的。因此保守式 GC 算法