引用计数算法:
- 最初的算法
- 现代虚拟机大多已弃用此算法
- 导致循环引用
- 效率高
可达性分析算法
/根搜索算法:
- HotSpot
- GC Roots
- 虚拟机栈的栈帧的局部变量表所引用的对象
- 本地方法栈的JNI所引用的对象
- 方法区的
静态变量
和常量
所引用的对象
- 可达性
- 图论
什么时候进行垃圾回收:
- 当 eden 区或者 S 区(包括 s0 和 s1 ,又称 from 和 to 区)不够用时
- 当老年代不够用时
- 当方法区不够用时
- System.gc()
标记清除算法
- 先标记(根据
可达性分析算法
查找)后清除 - 效率低
- 内存碎片化
- Stop the world(
STW
)
复制算法
- 效率高(适合回收生命周期短的对象)
- 浪费空间太严重
标记/整理算法
- 解决内存碎片化
- 速度慢