前言
前面文章我们介绍了JVM的内存结构、JVM的垃圾回收机制,那么这篇文章我们来了解进行回收垃圾的垃圾回收器
串行回收器
使用单线程进行垃圾回收的回收器,每次回收只有一个线程。对于在并发能力弱的计算机上有更好的表现。
1、新生代串行回收器
新生代回收器使用的是复制算法、最垃圾的回收器之一、垃圾回收的时候会触发Stop-The-World现象。其他工作线程都需要暂停,等待垃圾回收完毕。
2、老年代回收器
老年代回收器使用的标记压缩算法,和新生代差不多,也会造成Stop-The-World现象。
并行回收器
并行回收器使用多线程进行回收,根据内存区域不同并行回收器又分为了三种类型。
1、新时代ParNew回收器
只是简单的将串行回收器多线程化,回收策略、算法、参数和新生代串行回收器一样
2、新时代Parallel GC回收器
和新时代ParNew回收器类似,区别在于新时代Parallel GC回收器非常注重系统的吞吐量
3、老年代Parallel GC回收器
和新时代Parell GC回收器类型,区别在于老年代 Pareel GC回收器比较注重于老年代的内存对象。
CMS回收器
CMS回收器主要关注系统的停顿时间,使用多线程进行回收的回收器,使用标记清除算法
G1回收器
G1回收器是JDK1.7的全新垃圾回收器,长期来看是为了代替CMS回收器。
G1回收器和之前的垃圾回收器的策略有所不同,从分代来看,G1依然属于分代垃圾回收器,但是他最大 改变是使用了分区算法,从而使得Eden区、From区、Suvibor区和老年代区的内存不必连续。
在G1回收器之前,所有的垃圾回收器其内存分配都是连续的

在G1回收器之后,其将一大块的内存分为了很多细小的块,不要求内存是连续的。

相关参数
打开 G1 收集器,我们可以使用参数:`-XX:+UseG1GC。
设置目标最大停顿时间,可以使用参数:-XX:MaxGCPauseMillis。
设置 GC 工作线程数量,可以使用参数:-XX:ParallelGCThreads。
设置堆使用率触发并发标记周期的执行,可以使用参数:-XX:InitiatingHeapOccupancyPercent。
小结
从一开始的串行回收器、并行回收器、CMS回收器再到G1回收器。垃圾回收器不断的改进,使得回收效率不断变高。

网友评论