文章

垃圾回收器

垃圾收集器

在java虚拟机中,垃圾回收器有一下几种:

串行垃圾回收器

并行垃圾回收器

GMS回收器

G1回收器

串行回收器只有一个工作线程,对于并行能力较弱的计算机来说,穿行回收器的专注性和独占性往往有更好的表现

并行回收器在串行回收器基础上做了改进,他可以使用多个线程同时进行垃圾回收,对于计算能力强的计算机而言,可以呀有效的缩短垃圾

回收所需的实际时间

ParNew回收器是一个工作在新生代的垃圾收集器,他只是简单的将串行回收器多线程化,他的回收策略和算法和串行回收器一样

  • XX:+UseParNewGC新生代并行回收器,

ParallelGC回收器:新生代ParallelGC回收器,使用了复制算法的收集器,也是多线程独占性是的收集器,但ParallelGC回收器有个非常重要的特点,就是它非常关注系统的吞吐量

ParallelOldGC:老年代垃圾回收器 也是一种关注吞吐量的回收器,它使用了标记压缩法回收

CMS回收器:并发标记清除,他使用的是标记清除法,主要关注系统停顿时间。

CMS并不是独占回收器,也就是说CMS回收过程中,应用程序仍然在不停的工作

CMS不会等到应用程序饱和才回收垃圾,而是达到某一阀值时候开始回收,

  • XX:CMSInitiatingOccupancyFraction 默认为68

还有一些参数可以设置CMS回收完成后是否进行碎片整理,进行多少次CMS之后,対内存进行一次压缩。

G1回收器是jdk1.7中提出的垃圾回收器,长远目标来看是为了取代CMS回收器,G1回收器属于分代垃圾回收器,区分新生代和老年代,

依然有eden和from/to区,并且采用了分区算法

并行性:回收期间使用多线程同时工作

并发性:G1拥有与程序交替执行的能力,部分工作可与应用程序同时执行,在整个GC期间不会完全阻塞应用程序

分代GC:G1依然是一个分代的收集器,但他是兼顾新生代和老年代一起工作

空间整理:G1采用了有效复制对象的方式,减少空间碎片

可预见性:由于分区的原因,G1可以只选取部分区域进行回收,缩小了回收范围,提高了性能

  • XX:+UseG1GC 应用G1收集器
  • XX:MaxGCPauserMillis: 指定最大停顿时间
  • XX:ParallelGCThreads 设置并行回收的线程数量
本文由作者按照 CC BY 4.0 进行授权