CMS
1、目标
CMS以获取最短回收停顿时间为目标。
2、采用的算法
CMS采用的算法是:标记-清除。
3、概念
Stop The World:虚拟机停顿正在执行的任务,即停顿用户线程。
4、CMS收集过程
①初始标记:Stop The World。从GC Roots开始,只标记与GC Roots直接关联的对象,速度很快。
②并发标记:与用户线程可以并发执行,从GC Roots开始,进行可达性分析,找出存活对象。
③重新标记:Stop The World。因为并发标记阶段用户线程继续执行,导致原先的标记可能发生变动,该阶段就是对原先的标记进行修改。
④并发清除:垃圾清除线程和用户线程并发执行,清除垃圾。由于用户线程还在运行,所以可能会产生新的垃圾,称为“浮动垃圾”。
5、CMS缺点
①需要更多的CPU资源:为了让应用程序不停顿,CMS线程和应用程序线程并发执行,这样的话就会需要更多的CPU资源。
②无法处理浮动垃圾:最后的并发清除阶段是并发执行的,所以必然会产生浮动垃圾。
③产生大量的空间碎片:CMS采用标记-清除算法,势必会产生空间碎片。
G1(Garbage First)
1、解释
G1收集器将Java堆划分为多个大小相等的独立区域,即Region,新生代和老年代不是物理隔阂的,而是部分Region的集合。G1跟踪各个Region里面的垃圾堆积的价值大小(即回收获得的空间大小以及回收所需要的时间),在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region。
2、采用的算法
G1采用的算法是:标记-整理。
3、G1收集过程
①初始标记:Stop The World。从GC Roots开始,只标记与GC Roots直接关联的对象,速度很快。
②并发标记:与用户线程可以并发执行,从GC Roots开始,进行可达性分析,找出存活对象。
③最终标记:Stop The World。因为并发标记阶段用户线程继续执行,导致原先的标记可能发生变动,该阶段就是对原先的标记进行修改。
④筛选回收:Stop The World。将各个Region分区的回收价值和成本进行排序,根据用户所期望的停顿时间指定回收计划。
4、G1特点
①并行与并发。
②分代收集:分代概念在G1中仍然保留,采用不同的算法处理不同的对象。
③空间整合:G1采用的算法是标记-整理,不会产生空间碎片。
④可预测的停顿时间:由于划分了Region,后台也维护了一个优先列表,会在用户期望的时间内,优先回收价值最大的。