GC收集器搭配图:
图1 gc收集器搭配1.serial收集器:单线程收集器,运行时stw,client模式下默认新生代收集器(简单而高效,桌面应用场景下,jvm管理的内存一般不大,stw时间一般可控制在100ms内);
gc算法:新生代使用复制算法,老年代使用标记-整理算法
2.ParNew收集器:Serial的多线程版本。server模式下的首选新生代收集器,因为除了Serial外,只有它能和CMS配合工作;
3.Parallel Scavenge收集器:新生代收集器,多线程+复制算法,目的是达到一个可控制的吞吐量: (运行用户代码时间/(运行用户代码时间+gc时间));
4.Serial Old收集器:serial收集器的老年代版本,单线程,标记-整理算法;
5.Parallel Old收集器:Parallel Scavenge收集器的老年代版本,多线程+标记-整理算法。适合注重吞吐量和cpu敏感的场景;
6.CMS收集器:基于标记-清除算法,目标是获取最短stw时间
步骤:
初始标记(stw):标记gc root能直接关联的对象
并发标记:gc root tracing,可以和用户线程并发执行
重新标记(stw):修正并发标记期间,标记变动的对象的标记记录
并发清除:可以和用户线程并发执行
优点:并发收集,低停顿
缺点:1.对cpu资源敏感;2.无法处理浮动垃圾;3.产生内存碎片;
7.G1收集器:整体基于标记-整理算法,局部基于复制算法
特点:1.并行与并发,使用多个cpu来减少stw;2.分代收集;3.空间整合,不会产生内存碎片;4.stw可预测
g1将java堆划分为多个大小相等的独立区域(Region),跟踪各个region里面垃圾堆积的价值大小,维护一个优先列表(回收所需时间和回收能获得的空间),根据运行的gc时间,回收价值最大的region
步骤:类似cms
初始标记
并发标记
最终标记
筛选回收
网友评论