垃圾回收算法
STW
暂停程序(Stop the world,STW)
随着用户程序申请越来越多的内存,系统中的垃圾也逐渐增多;当程序的内存占用达到一定阈值时,整个应用程序就会全部暂停,垃圾收集器会扫描已经分配的所有对象并回收不再使用的内存空间,当这个过程结束后,用户程序才可以继续执行
标记清除法(mark-sweep)
-
标记
- 根对象出发
- 标记堆中所有存活对象
下图A/C/D存活 B/E/F不可以达
-
清除
- 遍历堆中所有对象
- 回收被标记的垃圾对象并回收对象内存加入空闲链表
下图:B/E/F对象回收,内存空间加入空闲链表
三色标记法
为了解决标记清除法STW过长,程序中对象分为三类
- 白色对象 — 潜在的垃圾,其内存可能会被垃圾收集器回收;
- 黑色对象 — 活跃的对象,包括不存在任何引用外部指针的对象以及从根对象可达的对象;
- 灰色对象 — 活跃的对象,因为存在指向白色对象的外部指针,垃圾收集器会扫描这些对象的子对象;
待续