1 垃圾收集器
收集器名称 | 基于算法 | 用于年代 |
---|---|---|
Serial | 串行 复制 | 年轻代 |
ParNew | 并发 复制 | 年轻代 |
Parallel Scavenge | 并发 复制 | 年轻代 |
Serial Old (MarkSweep Compact) | 标记-整理 | 老年代 |
Parallel Old (PS MarkSweep) | 标记-整理 | 老年代 |
CMS | 标记-清除 | 老年代 |
G1 | 标记-整理 | ALL |
2 G1 收集器
2.1 特点
并行与并发
G1收集器可以通过并发的方式让java程序继续执行
分代收集
它把Java堆划分为多个大小相等的独立区域(Region),新生代与老年代不再物理隔离,它们都是一部分Region的集合。
空间整合
从整体来看是基于“标记-整理”,从局部上看确实基于“复制”算法,这意味着G1运行期间不会产生内存空间碎片,收集后能提供规整的可用内存。这种特性有利于程序长时间运行,分配大对象时不会因为无法找到连续内存空间而提前出发下一次GC。
可预测的停顿
它可以有计划的避免在整个java堆中进行全区域的垃圾收集,原理是使用Remembered Set 来跟踪记录各个Region里面的垃圾堆积的价值大小(回收所获得的空间大小以及回收所需时间的经验值),每次根据允许的收集时间,优先回收价值最大的Region。