清除阶段(Sweep)
一个对象出现第一次没有被引用的情况,就会被加入到F-Queue队列等待执行finalize()方法判断是否有机会复活或者直接被当作垃圾回收。以便有足够的可用内存空间为新对象分配空间。
目前JVM有三种常见的垃圾回收算法:标记 - 清除算法(Mark - Sweep)、复制算法、标记压缩算法
一、标记 - 清除算法(Mark - Sweep)
1、背景:标记 - 清除算法(Mark - Sweep)是一种非常基础和常见的垃圾回收算法,该算法被J.MaCarthy等人再1960年提出并应用于Lisp语言。
2、原理:当堆中有效内存空间被耗尽的时候,就会停止整个程序(也被称之为stop the world 所谓的STW),然后进行两项工作,第一项则是标记。第二项则是清除。
(1)标记:Collector从引用根节点开始遍历,标记所有被引用的对象。一般是在对象的Header中记录为可达对象。
(2)清除:Collector对堆内存从头到尾进行线性的遍历,如果发现某个对象在其Header中没有标记为可达对象,则将其回收。 图文: