一、哪些对象需要被回收(对象已死?先判断)
1.1 引用计数器(Java垃圾回收器从来没用过)
2.2 可达性分析算法
如果能被 GC Root找到的就是可达的。那哪些能被看成GC Root?
a, 虚拟机栈中本地变量表引用的对象
b, 方法区中 类静态变量引用的对象 & 常量引用的对象
c, 本法方法栈中JNI引用的对象
其实 GC Root 不可达的 像比如图中D对象,还是会再挽救一次 finalize()
二、判断完了以后,就是怎么回收。垃圾回收算法
2.1 标记-清除算法: 效率不高,有空间碎片
2.2 复制算法 : 没有碎片,但得分一块出来复制用,内存利用率(分一半内存)有问题
2.3 标记整理算法 :(8:1:1 新生代) 用的时间有点长
2.4 分代收集:根据不同的分代选择不同的算法。