JVM垃圾收集算法[第一种]

一.标记-清除算法(Mark-Sweep)

(1).算法涉及的概念:

collector:指的是垃圾收集器
mutator:指除了collector之外的部分,比如我们的应用程序本身
1.mutator职责:
    NEW(分配内存)
    READ(从内存中读取内容)
    WRITE(将内存写入内存)
2.collector职责:
    回收不在使用的内存来供mutator进行NEW操作的使用

(2).回收过程

Mark-Sweep算法将垃圾回收分为两个阶段:标记阶段清理阶段
1.标记

collector从mutator根对象开始进行遍历,从mutator根对象可以访问到的对象都打上一个标识;一般在对象的header中,将其记录为可达状态;

2.清除

collector对堆内存从头到尾进行线性遍历,如果发现某个对象没有标记为可达对象通过读取header信息则将其回收;

JVM垃圾收集算法[第一种]

(3).缺点

存在大量的空间碎片,由于收回之后的内存空间不连续,在给新对象分配内存时;如果需要过大的内存空间,从而导致没有足够的了用内存空间分配给较大的对象.

(4).有趣理解

标记.清除算法( Mark-Sweep )是一种非常基础和常见的垃圾收集算法,该算法被 I.McCarthy等人在 1960 年提出并成功地发明井应用于 Lisp 言。以餐 巾纸作为 例, 午餐过程中,餐厅的所有人都根据自己的需要取用餐巾纸。 当垃圾收集机器人想收集废旧餐 巾纸的时候,它让所有用餐的人先停下来,然后,依次询问餐厅里的每一个人: “你正在用餐巾纸吗?你用的是哪一张餐 巾纸?”机器人根据每个人的回答将人们正在使用的餐巾纸画上记号。询问过程结束后,机器人在餐厅里寻找所有散落在餐桌上且没有记号的餐巾纸(这些显然都是用过的废旧餐巾纸〉,把它们统统扔到垃圾箱里。
----摘抄自<深入理解JVM+G1+GC>