jvm垃圾回收-7种垃圾收集器

macrossft macrossft     2023-03-20     180

关键词:

概述

垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法)的具体实现,不同商家、不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚拟机中的垃圾收集器。7种垃圾收集器如图所示。
图中表示7种作用于不同分代的收集器,如果两个收集器之间存在连线,说明可以搭配使用。横线上办部分为年轻代的垃圾收集器,下半部分为老年代的垃圾收集器。
技术图片

相关概念

STW机制

Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互;这些现象多半是由于gc引起。

吞吐量

指的是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即
吞吐量 = 运行用户代码时间 /(运行用户代码时间 + 垃圾收集时间)。
假设虚拟机总共运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%。

并行和并发

  • 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。
  • 并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行。而垃圾收集程序运行在另一个CPU上。

Minor GC 和 Full GC

  • 新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快。
  • 老年代GC(Major GC / Full GC):指发生在老年代的GC,出现了Major GC,经常会伴随至少一次的Minor GC(但非绝对的,在Parallel Scavenge收集器的收集策略里就有直接进行Major GC的策略选择过程)。Major GC的速度一般会比Minor GC慢10倍以上。

Serial收集器

收集器流程图如图所示
技术图片
特点:单线程的收集器,在工作时,必须暂停其他所有的工作线程,直至它收集结束。也是虚拟机默认的新生代收集器
优点:

  • 单线程执行,没有线程交互的开销,
  • 垃圾收集停顿在几百毫秒内,这一定程度上可以接受

缺点:STW问题(“Stop The World”)

ParNew收集器

ParNew收集器就是Serial收集器多线程的版本。 除了多线程外,其余的行为、特点和Serial收集器一样;
在Server模式下,ParNew收集器是一个非常重要的收集器,因为除Serial外,目前只有它能与CMS收集器配合工作;
但在单个或两个CPU环境中,不会比Serail收集器有更好的效果,因为存在线程交互开销。

设置参数

  • "-XX:+UseConcMarkSweepGC":指定使用CMS后,会默认使用ParNew作为新生代收集器;
  • "-XX:+UseParNewGC":强制指定使用ParNew;
  • "-XX:ParallelGCThreads":指定垃圾收集的线程数量,ParNew默认开启的收集线程与CPU的数量相同;

parallel scavenger收集器

parallel scavenger收集器是达到一个可控制吞吐量。既尽量的缩短垃圾收集时间,保证与用户的交互速度。既给定一个指定的垃圾收集停顿收集,当垃圾收集时间超过给定值,无论是否回收完成都会停止回收工作。
特点:

  • 新生代收集器
  • 与ParNew一样 并行的多线程收集器
    设置参数
  • -XX:MaxGCPauseMillis
    控制最大垃圾收集停顿时间,大于0的毫秒数
    MaxGCPauseMillis设置得稍小,停顿时间可能会缩短,但也可能会使得吞吐量下降。因为可能导致垃圾收集发生得更频繁
  • -XX:GCTimeRatio
    设置垃圾收集时间占总时间的比率,0<n<100的整数
    GCTimeRatio相当于设置吞吐量大小
  • -XX:+UseAdptiveSizePolicy
    这是一个开关参数,打开参数后,就不需要手工指定新生代的大小(-Xmn)、Eden和Survivor区的比例(-XX:SurvivorRatio)、晋升老年代对象年龄(-XX:PretenureSizeThreshold)等细节参数了,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量,这种方式称为GC自适应的调节策略(GC Ergonomics)。自适应调节策略也是Parallel Scavenge收集器与ParNew收集器的一个重要区别。

Serial Old收集器

Serial Old 是 Serial收集器的老年代版本,它同样是一个单线程收集器,使用 “标记-整理”(Mark-Compact) 算法。
此收集器的主要意义也是在于给Client模式下的虚拟机使用。如果在Server模式下,它还有两大用途:

  • 在JDK1.5 以及之前版本(Parallel Old诞生以前)中与Parallel Scavenge收集器搭配使用
  • 作为CMS收集器的后备预案,在并发收集发生Concurrent Mode Failure时使用

Parallel Old收集器

Parallel Old收集器是parallel scavenger收集器的老年代版本。
特点:

  • 采用“标记-整理”算法
  • 多线程执行
  • Parallel Old收集器的工作流程与Parallel Scavenge相同

CMS收集器

CMS收集器是一种以获取最短回收停顿时间为目标的收集器。

G1收集器

阉割 后续补充

直通bat必考题系列:7种jvm垃圾收集器特点,优劣势及使用场景

...,如果说垃圾收集算法是JVM内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。常见的垃圾收集器有3类:1.新生代的收集器包括:SerialPraNewParallelScavenge2.老年代的收集器包括:Ser 查看详情

《深入理解jvm——7种垃圾收集器》

JVM  深入理解JVM(3)——7种垃圾收集器 PostedbyCrowonAugust15,2017如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不... 查看详情

《深入理解jvm——7种垃圾收集器》

JVM  深入理解JVM(3)——7种垃圾收集器 PostedbyCrowonAugust15,2017如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不... 查看详情

深入理解jvm——7种垃圾收集器

文章转载来源:深入理解JVM(3)——7种垃圾收集器如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、版本... 查看详情

面试官:你对jvm垃圾收集器了解吗?13连问你是否抗的住!

关于JVM垃圾收集器的面试题1、简述Java垃圾回收机制2、GC是什么?为什么要GC3、垃圾回收的优点和原理。并考虑2种回收机制4、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃... 查看详情

jvm垃圾回收2(垃圾收集算法)

...、关于几个概念:(标记垃圾算法、垃圾收集算法、垃圾收集器)  前面说了如何寻找jvm垃圾,有两种方法:引用计数法/可达性算法。这篇准备讲,标记完垃圾之后,回收的算法,这里的算法只是垃圾回收的思想。后面会讲... 查看详情

jvm垃圾回收器(终结篇)

...算法、分代收集算法。那么接下来我们重点研究Jvm的垃圾收集器(serial收集器、parnew收集器、parallelscavenge收集器、serial old收集器、parallelold收集器、cms收集器、g1收集器)。前面说了那么多就是为它做铺垫的。正式进入前先... 查看详情

jvm垃圾回收篇(经典垃圾回收器讲解)(代码片段)

经典垃圾回收器讲解1.Serial垃圾收集器2.ParNew垃圾收集器3.Parallel垃圾收集器4.CMS垃圾收集器5.G1垃圾收集器1.基本介绍2.四大特性3.不足之处4.参数设置5.适用场景6.什么是Region?7.什么是记忆集?8.G1回收过程9.G1回收详细步骤6.... 查看详情

jvm垃圾回收篇(经典垃圾回收器讲解)(代码片段)

经典垃圾回收器讲解1.Serial垃圾收集器2.ParNew垃圾收集器3.Parallel垃圾收集器4.CMS垃圾收集器5.G1垃圾收集器1.基本介绍2.四大特性3.不足之处4.参数设置5.适用场景6.什么是Region?7.什么是记忆集?8.G1回收过程9.G1回收详细步骤6.... 查看详情

jvm之几种垃圾收集器简单介绍

本文中的垃圾收集器研究背景为:HotSpot+JDK1.7一、垃圾收集器概述如上图所示,垃圾回收算法一共有7个,3个属于年轻代、三个属于年老代,G1属于横跨年轻代和年老代的算法。JVM会从年轻代和年老代各选出一个算法进行组合,连... 查看详情

jvm垃圾收集器整理

概述垃圾收集器是jvm实现内存回收的具体实现。本次分享要介绍的7种垃圾收集器的作用区域及其之间的关系如下图: 注:如果2个垃圾收集器之间有连线,表示可以搭配使用垃圾收集器并没有最好的,只有针对不同应用场景... 查看详情

jvm之gc算法的实现(垃圾回收器)

...才是真理。一、JVM垃圾回收器的结构JVM虚拟机规范对垃圾收集器应该如何实现没有规定,因为没有最好的垃圾收集器,只有最适合的场景。  图中展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,则说... 查看详情

垃圾回收器

HotSpot虚拟机中有7种垃圾收集器:Serial、ParNew、ParallelScavenge、SerialOld、ParallelOld、CMS、G1。垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法、分代收集)的具体实现,不同商家、不同版本的JVM所提供的垃圾... 查看详情

jvm垃圾收集器

...易技术产品运营经验。说明:垃圾回收算法是理论,垃圾收集器是回收算法的实现,关于回收算法,见《第四章JVM垃圾回收算法》1、七种垃圾收集器Serial(串行GC)--复制ParNew(并行GC)--复制ParallelScavenge(并行回收GC)--复制Seri... 查看详情

jvm垃圾收集器

...易技术产品运营经验。说明:垃圾回收算法是理论,垃圾收集器是回收算法的实现,关于回收算法,见《第四章JVM垃圾回收算法》1、七种垃圾收集器Serial(串行GC)--复制ParNew(并行GC)--复制ParallelScavenge(并行回收GC)--复制Seri... 查看详情

jvm垃圾收集算法的选择

1.介绍JVM提供了多种垃圾收集器,应该根据应用选择一种合适的垃圾收集器。垃圾回收管理内存通过如下操作:  在年轻代分配对象,把年龄大的对象晋升到老年代。  当年老代超过阈值的时候,并发标记收集。  通过合... 查看详情

jvm-垃圾回收器

目录垃圾收集器Serial收集器SerialOld收集器ParNew收集器ParallelScavenge收集器(并行清除)/‘p?r?l?l//‘sk?v?nd?/ParallelOld收集器CMS收集器G1收集器几种收集器对比Serial收集器VSParNew收集器ParallelScavenge收集器VSCMS等收集器ParallelScavenge收集器VSPa... 查看详情

面试官:你对jvm垃圾收集器了解吗?13连问你是否抗的住!

关于JVM垃圾收集器的面试题1、简述Java垃圾回收机制2、GC是什么?为什么要GC3、垃圾回收的优点和原理。并考虑2种回收机制4、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃... 查看详情