一. 垃圾回收算法
1. 标记清除;
2. 复制;
3. 标记整理;
二. 垃圾收集器
1. Serial: 单线程,串行,新生代复制算法,老年代标记整理算法;
2. SerialOld: serial的老年代版本,标记整理,作为cms的后备;
3. PerNew: serial的多线程版本,也是串行,新生代复制算法,老年代标记整理算法;
4. Parallel Scavenge: 关注最大停顿时间和吞吐量,新生代复制算法,老年代标记整理算法;
5. CMS: 标记清除, 初试标记---并发标记---重新标记---并发清除;
6. G1: 满足最大停顿时间要求和最大吞吐量要求,堆分作多个区域Region,自己维护优先列表,根据手机时间要求,优先回收价值最高的Region,
三. 判断对象是否回收的方式:
1. 引用计数: 无法处理循环引用!
2. 可达性算法: GC Roots---虚拟机栈中引用的对象,方法区中类静态属性引用的对象,方法区中常量引用的对象,原生方法栈引用的对象;
四. 标记对象可回收
1. 对象到GC Roots无引用链,进行第一次标记;
2. 对象重写了finalize()方法且未执行,将对象插入F-Queue队列中,由JVM自动创建的一个低优先级的Finalizer线程触发finalize()方法,这是对象最后的逃脱方法,进行二次标记,如果与Gc Roots引用链建立了联系,则第二次标记时将此对象移出待回收集合;
(GC发生时,快速枚举GC Roots:扫描OopMap,不用遍历全局对象)
五. HotSpot Jvm默认的垃圾收集器: UseParallelGC, 使用组合收集器:
Parallel Scavenge(PS Scavenge) --- 新生代 --- 复制算法;
Serial Old(Ps MarkSweep,与SerialOld类似) --- 老年代 --- 标记清除算法;