GC线程与应用线程保持相对独立,当系统需要执行垃圾回收任务时,先停止工作线程,然后命令GC线程工作。以串行模式工作的收集器,称为串行收集器(即SerialCollector)。与之相对的是以并行模式工作的收集器,称为并行收集器(即ParallerCollector)。
串行收集器:Serial
串行收集器采用单线程方式进行收集,且在GC线程工作时,系统不允许应用线程打扰。此时,应用程序进入暂停状态,即Stop-the-world。
Stop-the-world暂停时间的长短,是度量一款收集器性能高低的重要指标。
是针对新生代的垃圾回收器,基于标记-复制算法。
并行收集器:ParNew
并行收集器充分利用了多处理器的优势,采用多个GC线程并行收集。可想而知,多条GC线程执行显然比只使用一条GC线程执行的效率更高。一般来说,与串行收集器相比,在多处理器环境下工作的并行收集器能够极大地缩短Stop-the-world时间。
针对新生代的垃圾回收器,标记-复制算法,可以看成是Serial的多线程版本
吞吐量优先收集器:ParallelScavenge
针对新生代的垃圾回收器,标记-复制算法,和ParNew类似,但更注重吞吐率。在ParNew的基础上演化而来的ParallelScanvenge收集器被誉为“吞吐量优先”收集器。吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量=运行用户代码时间/(运行用户代码时间垃圾收集时间)。如虚拟机总运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%。
ParallelScanvenge收集器在ParNew的基础上提供了一组参数,用于配置期望的收集时间或吞吐量,然后以此为目标进行收集。
G1收集器
G1重新定义了堆空间,打破了原有的分代模型,将堆划分为一个个区域。这么做的目的是在进行收集时不必在全堆范围内进行,这是它最显著的特点。区域划分的好处就是带来了停顿时间可预测的收集模型:用户可以指定收集操作在多长时间内完成。即G1提供了接近实时的收集特性。
ParallelOld收集器
ParallelOld是ParallelScanvenge收集器的老年代版本,多线程收集器,使用标记-整理算法。
SerialOld收集器
SerialOld是Serial收集器的老年代版本,单线程收集器,使用标记-整理算法。这个收集器的主要意义也是在于给Client模式下的虚拟机使用。
结束语:以上就是关于垃圾收集器与内存分配的全部内容,更多内容请关注学步园。