Serial收集器
单线程收集器,收集时会 stop the word。新生代收集用复制算法,老年代采用标记整理算法。能与CMS收集器配合使用。
ParNew收集器
Serial的多线程版本,算法策略和Serial一样。能与CMS收集器配合使用。
Parallel Scavenge(并行回收)收集器
新生代收集器,采用复制算法,多线程收集器,能设置停顿时间和吞吐量大小。
SerialOld收集器
Serial收集器的老年代版本,单线程,标记整理算法。
ParallelOld收集器
Parallel Scavenge收集器的老年代版本,多线程,标记整理算法。
CMS收集器
目的是GC停顿时间最短,采用标记清楚算法,只能回收老年代,预处理收集器,不能等老年代用完再回收,要设置阈值,提前回收。CMS会产生内存碎片,分为四个步骤:
- 初始标记,会stw,标记存活对象,从老年代GC-ROOTS找和年轻代引用这老年代对象的对象。
- 并发标记:从初始标记的对象中找出存活的对象,并发执行不会stw。
- 重新标记:会stw,标记整个堆(年轻代+老年代)存活的对象。年轻代的对象引用着老年代的对象也会认为老年代对象存活。可设置在重新标记前mingc,减少年轻代引用老年代对象。
- 并发清除:清楚对象,回收内存。不会stw,所以会产生浮动垃圾,下次可清除。
G1收集器
年轻代、老年代不再占用连续空间,G1将整个内存划分为许多区域(region),每一代都占多个region,采用复制算法,不会产生内存碎片
网友评论