01.serial:(新生代)
单线程工作,这不仅是指同一时段只有一个垃圾回收线程,而且是也垃圾回收线程工作的时候,需要暂停全部的工作线程。
对新生代使用的标记–复制算法
serialOld:(老生代):对老生代使用的标记–整理算法
对于内存的搬运会出现卡顿的现象,叫做“Stop The World”。
02.pernew: (新生代)
多线程并行工作,这里说的是可以多个pernew垃圾回收线程同一时间段工作。但是和工作线程还是先要暂停。
对新生代使用的标记–复制算法
pernewOld: (老生代)对老生代使用的标记–整理算法
03.CMS :(老生代)
基于标记–清除的多标记工作,一.初始标记,找出GC Roots上的对象(直接关联对象) 二.(并发)根据GC Roots上找到的对象进行引用遍历,找出全部可达的对象。三.第二步是很需要时间的,可能随着时间,对象的引用发生了变化,这一步是重新标记。四.(并发)进行对象清除。前两次的标记都会出现stoptheworld。
因为是标记–清除算法,所以会产生内存空间碎片,存放大对象的时候会因为无法存放而出发Full GC事件,对堆中的存活对象进行移动,这样会产生卡顿现象。
04.G1 (全堆)
没有采用分代的垃圾回收思想,利用的整个堆的内存空间,所以又叫做全堆垃圾回收器。G1把对内存划分成为零碎的小区域,每个区域英文名叫做Region。但是其实G1还是采用了分代的思想,Region有几种:Eden,survival,老生代。这几种Region随机放置,不必像之前一样必须连续,但是跟之前的一样,Eden垃圾回收完了后数据传入survival,survival如果放不下,Eden的数据一部分直接放入老生代中,survival一部分数据也放入老生代中,最后Eden内存全部值为0。