美文网首页
六、JVM系列(垃圾回收器)

六、JVM系列(垃圾回收器)

作者: 大虾啊啊啊 | 来源:发表于2021-05-08 14:02 被阅读0次

前言

前面文章我们介绍了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回收器之前,所有的垃圾回收器其内存分配都是连续的


image.png

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


image.png

相关参数

打开 G1 收集器,我们可以使用参数:`-XX:+UseG1GC。

设置目标最大停顿时间,可以使用参数:-XX:MaxGCPauseMillis。

设置 GC 工作线程数量,可以使用参数:-XX:ParallelGCThreads。

设置堆使用率触发并发标记周期的执行,可以使用参数:-XX:InitiatingHeapOccupancyPercent。

小结

从一开始的串行回收器、并行回收器、CMS回收器再到G1回收器。垃圾回收器不断的改进,使得回收效率不断变高。


image.png

相关文章

网友评论

      本文标题:六、JVM系列(垃圾回收器)

      本文链接:https://www.haomeiwen.com/subject/uysudltx.html