Serial收集器
在jdk1.3.1之前是虚拟机新生代收集的唯一选择。
单线程,它只会使用一个CPU或一条收集线程完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,至到它收集结束。
它到现在依然是虚拟机运行在Client模式下的默认新生代收集器。
简单高效(与其他收集器的单线程比)对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程收集效率。
在用户的桌面应用场景中,分配给虚拟机管理的内存一般来说不会很大,所以收集时间很短,大概几十毫秒最多一百多毫秒,只要不是频繁发生,就不会影响用户体验。
ParNew收集器
是Serial收集器的多线程版本。它是许多运行在Server模式下的虚拟机中首选的新生代收集器。主要原因是它是目前除了Serial收集器外,唯一能和CMS收集器配合工作的收集器。
在单CPU环境下Serial收集器的效果会更好,就算在两个CPU环境下ParNew的表现也不一定会比Serial好。但是当CPU数量增多时它的效果就越好。
1.5版本HotSpot推出了一款在强交互应用中几乎可认为有划时代意义的垃圾收集器CMS收集器。HotSpot虚拟机中第一款真正意义上的并发收集器,他第一次实现了让垃圾收集线程与用户线程同事工作。
Parallel Scavenge收集器
新生代,复制算法,并行多线程收集器
其他收集器的关注点是尽可能地缩短垃圾收集时用户线程的停顿时间;它的目标则是达到一个可控制的吞吐量,尽快的完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。
该收集器提供了连个用于精确控制吞吐量的参数。控制最大垃圾收集停顿时间的-XX:MaxGCPauseMillis参数;直接设置吞吐量大小的-XX:GCTimeRatio参数。
该虚拟机还具有自适应调节的功能,能够动态的调整停顿时间或者最大吞吐量。
CMS收集器
基于标记-清除算法实现
整个过程4步:
初始标记
并发标记
重新标记
并发清除。
G1收集器
特点:并行与并发
分代收集
空间整合
可预测的停顿
步骤:
初始标记
并发标记
最终标记
筛选回收