jvm垃圾收集器有哪些

article/2025/11/5 3:47:43

Serial收集器

Serial收集器是最基本,发展最悠久的收集器,在JDK1.3.1之前是虚拟机新生代垃圾回收的唯一选择。这个收集器是一个单线程的。它的单线程的意义并不仅仅说明它只会使用一个CPU或者一条收集线程去完成收集工作,最重要的是,它进行垃圾收集时,其他工作线程会暂停,直到收集结束。这项工作由虚拟机在后台自动发起和执行的,在用户不可见的情况下将所有工作线程全部停掉,这对于很多应用程序来说是不可容忍的。我们可以设想一下,我们的计算机在运行1个小时就要停止5分钟的时候,这是什么情况?对于这种设计,虚拟机设计人员表示的也是非常委屈,因为不可能边收集,这边还要不断的产生垃圾对象,这样是清理不完的。所以从1.3一直到现在,虚拟机的开发团队一直为减少因垃圾回收而产生的线程停顿所努力着,所出现的虚拟机越来越优秀,但直到现在,依然没有完全消除。

讲到这里,貌似Serial收集器已经是"食之无味弃之可惜"了,但实际上,它依然是虚拟机在Client模式下,新生代默认的垃圾收集器。它有相对于其他垃圾收集器的优势,比如由于没有线程之间切换的开销,专心做垃圾收集自然能够收获最高的线程利用效率。在用户桌面应用背景下,一般分配给虚拟机的内存不会太大,收集几十兆或者一两百兆的新生代对象,停顿时间完全可以控制在几十毫秒到一百毫秒之间,这个是可以接受的,只要不是频繁发生。因此,Serial收集器在Client模式下,对于新生代来说依然是一个很好的选择。

在这里插入图片描述
ParNew收集器

ParNew收集器其实就是Serial收集器的多线程版本,除了使用多线程进行垃圾回收之外,其余可控参数,收集算法,停止工作线程,对象分配原则,回收策略等与Serial收集器完全一致。

除了多线程实现垃圾收集之外,其他没有什么太多创新之处,但是它确实Server模式下的新生代的首选的虚拟机收集器。其中一个重要的原因就是除了Serial收集器外,只有它能与CMS配合使用。在JDK1.5时期,HotSpot推出了一款在强交互应用划时代的收集器CMS,这款收集器是HotSpot第一款真正意义上的并发收集器,第一次实现了垃圾回收与工作线程同时工作的可能性,换而言之,你可以边污染,边收集。

不过CMS作为老年代的收集器,却无法与1.4中发布的最新的新生代垃圾收集器配合使用,反之只能使用Serial或者Parnew中的一个。ParNew收集器可以使用-XX:+UseParNewGC强行指定它,或者使用-XX:+UseConcMarkSweepGC选项后的默认新生代收集器。

ParNew收集器在单CPU环境下绝对不会有比Serial收集器更好的效果,甚至优于存在线程交互开销,该收集器在通过超线程技术实现的两个CPU的环境下都不能保证百分之百超越Serial收集器。当然,随着CPU数量的增加,对于GC时系统的有效资源利用还是很有好处的。在CPU非常多的情况下,可以使用-XX:ParallelGCThreads来限制垃圾回收线程的数量。

在这里插入图片描述
Parallel Scavenge收集器

Parallel Scavenge收集器是一个新生代收集器,采用复制算法,又是并行的多线程垃圾收集器。它的关注点与其它收集器的关注点不一样,CMS等收集器的关注点在于缩短垃圾回收时用户线程停止的时间,而Parallel Scavenge收集器则是达到一个可控制的吞吐量,所谓吞吐量就是CPU运行用户线程的时间与CPU运行总时间的比值,即 吞吐量 = (用户线程工作时间)/(用户线程工作时间 + 垃圾回收时间),比如虚拟机总共运行100分钟,垃圾收集消耗1分钟,则吞吐量为99%。停顿时间越短越适合与用户交互的程序,良好的响应速度能提高用户体验,但是高吞吐量则可以高效率的利用CPU的时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的程序。

有两个参数控制吞吐量,分别为最大垃圾收集时间: -XX:MaxGCPauseMills, 直接设置吞吐量的大小: -XX:GCTimeRatio

-XX:+UseAdaptiveSizePolicy

自适应策略也是Parallel Scavenge收集器区别去Parnew收集器的重要一点

Serial Old收集器

Serial Old收集器是Serial收集器的老年代版本,它同样是一个单线程收集器,使用标记-整理算法,这个收集器的主要目的也是在与给Client模式下使用。如果在Server模式下,还有两种用途,一种是在jdk5以前的版本中配合Parallel Scavenge收集器使用,另一种用途作为CMS的备用方案,在并发收集发生Concurrent Mode Failure时使用。

Parallel Old收集器

Parallel Old收集器是Parallel Scavenge收集器的老年代版本,使用多线程和标记-整理算法,这个收集器在jdk6中才开始使用的,在此之前Parallel Scavenge收集器一直处于比较尴尬的阶段,原因是,如果新生代采用了Parallel Scavenge收集器,那么老年代除了Serial Old之外,别无选择,由于老年代Serial在服务端的拖累,使得使用了Parallel Scavenge收集器也未必能达到吞吐量最大化的效果,由于单线程的老年代无法充分利用服务器多CPU的处理能力,在老年代很大而且硬件比较高级的环境中,这种组合的吞吐量甚至不如Parallel Scavenge收集器 + CMS。

直到Parallel Old收集器出现后,"吞吐量优先收集器"终于有了名副其实的组合,在注重吞吐量优先和CPU资源敏感的场合,可以采用Parallel Scavenge收集器 + Parallel Old收集器。

在这里插入图片描述
CMS收集器

CMS收集器是一种以获取最短停顿时间为目标的收集器。从名字(Concurrent Mark Sweep)上就可以看出,采用的标记-清除算法,它的过程分为4个步骤:

只有初始标记和重新标记需要暂停用户线程。

(1)初始标记 — 仅仅关联GC Roots能直接关联到的对象,速度很快;

(2)并发标记 — 进行GC Roots Tracing的过程;

(3)重新标记 — 为了修正并发标记期间,因用户程序运作而导致标记产生变动的那一部分对象的标记记录;

(4)并发清除
在这里插入图片描述
由于整个过程中耗时最长的并发标记和并发清除过程收集器都能与用户线程一起工作,所以总的来说,CMS的内存回收过程与用户线程一起并发执行的

CMS收集器的三大缺点:

(1)CMS收集器对CPU资源非常敏感

(2)无法处理浮动垃圾

(3)因为基于标记清除算法,所以会有大量的垃圾碎片产生 -XX:+UseCMSCompactAtFullCollection

G1收集器

首先,G1的设计原则就是简单可行的性能调优

-XX:+UseG1GC -Xmx32g -XX:MaxGCPauseMillis=200

其中-XX:+UseG1GC为开启G1垃圾收集器,-Xmx32g 设计堆内存的最大内存为32G,-XX:MaxGCPauseMillis=200设置GC的最大暂停时间为200ms。如果我们需要调优,在内存大小一定的情况下,我们只需要修改最大暂停时间即可。

(1)内存分配

(2)Young垃圾回收

(3)Mix垃圾回收

在这里插入图片描述
常见设置参数:
在这里插入图片描述
Java基础入门:

java零基础自学首Java入门教程(含Java项目和Java真题)

Javaweb核心基础

JavaWeb基础教程,Java web从入门到企业实战完整版

Java全套学习路线图

Java高级工程师课程


http://chatgpt.dhexx.cn/article/SIAcIhka.shtml

相关文章

经典垃圾收集器(三)

低延迟垃圾收集器 衡量垃圾收集器的三项重要指标:内存占用(Footprint)、吞吐量(Throughput)和延迟(Latency)。三者构成了一个“不可能三角” Shenandoah收集器 Shenandoah相比于G1有什么改进&…

垃圾收集器

如果说垃圾回收算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现,java虚拟机实现规范中对垃圾收集器应该如何实现并没有任何规定,因此不同厂商、不同版本的虚拟机提供的垃圾收集器存在很大的差异,接下来我们主要介绍…

深入理解7种垃圾收集器

**如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。**Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根…

Java中的垃圾收集器

目录 1、Java的垃圾收集器的分类 2、收集器的特点 3、评估GC的性能指标 4、Serial收集器 5、ParNew收集器 6、Parallel Scavenge 吞吐量优先 (与Parallel Old搭配) 7、CMS收集器 8、G1收集器 9、各种收集器的应用场景 垃圾收集器:垃…

java垃圾收集器

目录 简介 Serial 收集器 ParNew 收集器 并行(Parallel) 并发(Concurrent) Parallel Scavenge 收集器 Serial Old 收集器 Parallel Old 收集器 CMS收集器 G1收集器 G1简介 G1细节 G1 Minor GC流程 G1 Mixed GC流程 …

常用垃圾收集器介绍

本节将会介绍一下HotSpot虚拟机中的常用垃圾收集器:Serial,ParNew,Parallel Scavenge,Serial Old,Parallel Old,CMS,G1,会对每个垃圾收集器的概念和常用参数做下介绍。 目录 概述 …

JVM-垃圾收集器

一、常见的垃圾收集器有串行垃圾回收器(Serial)、并行垃圾回收器(Parallel)、并发清除回收器(CMS)、G1回收器。 1、串行垃圾回收器。 为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所…

JVM:7种垃圾收集器

一、Serial收集器(单线程收集器) 这个收集器是一个单线程的收集器,但它的“单线程”的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程…

JVM学习----七种垃圾收集器(GC)

文章目录 GC垃圾收集器七种经典的垃圾回收器查看默认垃圾收集器新生代Serial垃圾收集器(单线程、 复制算法)ParNew 垃圾收集器 (Serial的多线程版本、 复制算法)Parallel Scavenge 收集器(多线程复制算法、高效&#x…

ADS2020仿真信号的反射实例

通过前面对高速信号反射的学习,我们已经从理论上搞清了信号的反射,下面就借助高速信号仿真工具来看一下信号的反射。下图为典型的型号反弹图仿真电路。 R1为信号源内阻,TLIN为理想传输线模型,V1为近端测试点,V2为远端…

ADS(Advanced Design system)仿真测试元器件在不同功率下的输入阻抗

前言 先进设计系统 Advanced Design system(ADS)Agilent Technologies 是领先的电子设计自动化软件,适用于射频、微波和信号完整性应用。在前面的文章中,我详细介绍了如何测量电路的输入阻抗,但是测量方法是基于无源输…

ADS实验报告三:匹配电路的设计与仿真

文章目录 一、实验名称:匹配电路的设计与仿真二、实验要求:三、实验内容:1. 分立电容电感元件匹配电路仿真1.1 设计步骤及原理图1.2 仿真结果 2. 微带单分支短截线匹配电路仿真2.1 设计步骤及原理图2.2 仿真结果 3. 微带双分支短截线匹配电路…

ADS仿真遇到error如何查找原因

今天使用ADS进行版图仿真时,一直出现这样的error 每次遇到error出现,我选择的解决办法是: 1、看error英文,尝试自己理解; 2、使用有道(或者google翻译)的拍照翻译功能,看翻译是否与…

ICCAP2016如何调用ads的仿真器hpeesofsim

问题描述: 在安装了iccap2016和ads2016之后,发现iccap2016可以使用spice2仿真器,但是用hpeesofsim仿真器就会报错,显示找不到"\bin\iccapinterface"。 问题解决: 经过查询iccap的手册后发现,icc…

ADS(Advanced Design system)仿真对电路进行阻抗匹配

前言 先进设计系统 Advanced Design system(ADS)Agilent Technologies 是领先的电子设计自动化软件,适用于射频、微波和信号完整性应用。在测得到测试电路的输入阻抗后,那就是要对源阻抗和负载阻抗(测试得到的输入阻抗…

ADS仿真 之 直流仿真示例

本文介绍采用ADS2009仿真软件进行直流仿真,其用于测试设计电路的直流工作特性,它是所有模拟仿真、射频仿真的基础,是整个仿真的起点。对电路的直流仿真可以验证电路设计的DC特性、确定电路功耗、模拟DC传输特性(I-V曲线&#xff0…

ADS版图仿真遇到的问题

1,在仿真进行时,没有关程序,直接重启电脑出现的。 Error: Cannot start the simulation because the presence of the lock directory "E:\code\ADScode\TP_BPF_HFSS\Tp_8p8m\MyWorkspace_wrk\simulation\MyLibrary_lib\tp…

allegro16.6导出版图到ADS2019仿真的方法

首先配置好allegro软件 1. 选择FILE->Script, 弹出窗口后选择Browse , 选择ADS对应文件夹下\Keysight\ADS2019\ial\scripts的描述文件,并勾选Change Directory 点击确认; 2.回到Scripting界面点击Replay ; 在弹出的窗口红框位…

ADS仿真加载线型移相器

ADS仿真移相器 文章目录 ADS仿真移相器1、移相器的简介2、改进的负载型移相器仿真实例1.新建一个工程2.建立原理图3.仿真、查看结果采用并联电容的形式采用并联电感的形式总结规律1、移相器的简介 移相器是应用于微波通信、雷达和测量系统中的一种控制设备。它是一种二端口网络…

ADS(Advanced Design system)仿真后绘图和绘图技巧

前言 先进设计系统 Advanced Design system(ADS)Agilent Technologies 是领先的电子设计自动化软件,适用于射频、微波和信号完整性应用。 本文将记录,在使用ADS仿真后,根据数据作图,同时会记录一些绘图技…