JVM原理(五):JVM发展至今的七款垃圾收集器

JVM垃圾回收器介绍和对比 不同的垃圾回收器有不同的特性,并没有一个万能或最好的垃圾回收器,只能根据不同的业务场景选择最合适的垃圾回收器,所以这节就来了解下各个垃圾回收器的特性。 阅读详情

收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者

上图展示了七种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明他们可以搭配使用。图中收集器所在的区域,则表示它是属于新生代收集器抑或是老年代收集器。

1. Serial收集器

Serial收集器是最基础、历史悠久的收集器,同时他也是一个单线程工作的收集器。

优点:与其他收集器相比,简单而高效、它是所有收集器里消耗最小的,同时效率最高的单线程。

缺点:会“Stop the World”


当前:依旧是HotSpot虚拟机运行在客户端下默认的新生代收集器。

推荐:在客户端使用。


算法:标记-复制

2. ParNew收集器

ParNew收集器实质上是Serial收集器的多线程并行版本。

优点:低概率出现“Stop the world”

缺点:存在线程交互的开销,效率比Serial低。


当前:JDK9前使用ParNew搭配CMS

推荐:服务端


算法:标记-复制

3. Parallel Scavenge收集器

派瑞啦斯堪瑞吉

Parallel Scavenge目标是达到一个可控制的吞吐量:

用户可以设置控制最大垃圾收集停顿时间,和直接设置吞吐量大小。


算法:标记-复制

4. Serial Old收集器

Serial Old收集器是Serial收集器的老年代版本,使用单线程。

优点:单线程,快

缺点:可能会出现“Stop the world”


当前:JDK5之前是Parallel+Scavenge的后备预案。

推荐:客户端


算法:标记-整理

5. Parallel old 收集器

Parallel Scavenge收集器的老年代版本,使用多线程并发收集。

优点:降低“Stop the world”的概率

缺点:加大系统资源的使用


当前:JDK5之前是Parallel+Scavenge的后备预案。

推荐:注重吞吐率和处理资源较为稀缺的环境。比如大数据


算法:标记-整理

6. CMS收集器

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

优点:并发收集、低停顿

缺点:CMS收集器对处理器资源非常敏感,CMS无法处理“浮动垃圾”,有可能出现并发失败而进行Full GC,标记-清除会产生大量碎片化空间


当前:JDK5之前是Parallel+Scavenge的后备预案。

推荐:系统停顿时间尽可能短,已给客户带来更好的交互体验。B/S系统


算法:标记-清除算法

标记阶段并发:增量更新


运作过程

  1. 初始标记:标记一下GC Roots能直接关联到的对象,速度很快,会“STW”

  2. 并发标记:从GC Roots的直接关联对象开始遍历整个对象图的过程,耗时较长

  3. 重新标记:为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录。会“STW”

  4. 并发清除:清理删除标记阶段判断已经死亡的对象。

7. G1收集器

Garbage First ( 简称G1)收集器是垃圾收集器技术发展历史上的里程碑式的成果,它开创了收集 器面向局部收集的设计思路和基于Region的内存布局形式。被官方称之为“全能的垃圾回收器”。

目标:在延迟可控的情况下获得尽可能高的吞吐量。

特点:G1面向堆内存来组成回收集来进行回收,衡量标准不再是它属于哪个分代,而是哪块内存内存中存放的垃圾数量最多,回收收益最大,这就是G1收集器的Mixed GC模式。

Region堆:实现Mixed GC模式的关键。G1不再坚持固定大小以及固定数量的分代区域划分,而是把连续的Java堆划分为多个大小相等的独立区域(Region),每一个Region都可以根据需要,扮演新生代的Eden空间、Survivor空间,或者老年代空间。

Humongous区域:Region中还有一类特殊的Humongous区域,专门用来存储大对象,只要改对象大小超过Region容量一般就判定为大对象。

更具体的处理思路是让G1收集器去跟踪各个Region里面的垃圾堆积的“价值”大小,价值即回收所获得的空间大小以及回收所需时间的经验值,然后在后台维护一个优先级列表,每次根据用户设定允许的收集停顿时间(使用参数-XX: M axGCPauseMilis指定,默认值是200毫秒),优先处理回收价值收益最大的那些Region,这也就是“Garbage First”名字的由来。这种使用Region划分内存空间,以及具有优先级的区域回收方式,保证了G1收集器在有限的时间内获取尽可能高的收集效率。


缺点:

  1. 跨Region对象的回收要比其他收集器的效率低。

  2. 并发标记阶段,如果内存回收的速度赶不上内存分配的速度,G1会冻结用户线程,导致触发Full GC而产生的“STW”。


运行过程步骤:

  1. 初始标记( Initial Marking) :仅仅只是标记一下GC Roots能直接关联到的对象,并且修改TAMS指针的值,让下一阶段用户线程并发运行时,能正确地在可用的Region中分配新对象。这个阶段需要停顿线程,但耗时很短,而且是借用进行MinorGC的时候同步完成的,所以G1收集器在这个阶段实际并没有额外的停顿。

  2. 并发标记(Concurrent Marking) :从GC Root开始对堆中对象进行可达性分析,递归扫描整个堆里的对象图,找出要回收的对象,这阶段耗时较长,但可与用户程序并发执行。当对象图扫描完成以后,还要重新处理SATB记录下的在并发时有引用变动的对象。

  3. 最终标记(FinalMarking):对用户线程做另一个短暂的暂停,用于处理并发阶段结束后仍遗留下来的最后那少量的SATB记录。

  4. 筛选回收( Live Data Counting and Evacuation) :负责更新Region的统计数据,对各个Region的回收价值和成本进行排序,根据用户所期望的停顿时间来制定回收计划,可以自由选择任意多个Region构成回收集,然后把决定回收的那一部 分Region的存活对象复制到空的Region中,再清理掉整个旧Region的全部空间。这里的操作涉及存活对象的移动,是必须暂停用户线程,由多条收集器线程并行完成的。


整体看:标记-清除

局部看:标记-复制

标记阶段并发:原始快照

JVM-垃圾收集器 通过学习了解到现在商用的JVM中的垃圾收集采用的是分带收集算法,那么针对不同年代采用了不同的收集算法,从而在JVM发展的过程中,就产生了不同的垃圾收集器,一般分为新生代收集器和老年代收集器,两者相互组合进行GC操作(下图中相连的垃圾收集器表示可以相互组合,注意Serial Old和CMS也可以联合进行老年代的垃圾收集)。JDK6u14中开始测试的G1垃圾收集器,正式发布于JDK7u4中,是目前唯一 阅读详情

相关推荐

2D激光slam四种算法建图效果对比

2d激光slam四种算法建图比较

m0_73791170的博客 8446

jvm常见垃圾回收器

垃圾收集器的终极目标:提高吞吐量,降低延时,减少停顿。与之相对的则是更加复杂的设计和更多资源的消耗。以上是7款目前已经商用的垃圾回收器,除此之外还有更多正在实验阶段更强悍的回收器,比如Shenandoah,ZGC,由于篇幅有限加之两者更为复杂,留作下篇单独做记录总结。能力有限,如有问题,请看官们及时指正~文中插图引用自:深入理解Java虚拟机第三版 - 周志明著。

weixin_39765162的博客 1639

统信UOS开发环境支持Java

集成了JDK和多种IDE,为开发者提供了从代码编写、编译、调试到部署的一站式开发解决方案。

RZer的博客 2253

JVM:垃圾收集器(7种)

CMS(Concurrent Mark Sweep)收集器是以获取最短回收停顿时间的为目标的收集器。注重服务的响应速度,希望系统停顿时间尽可能短,以给用户更好的交互体验。这个收集器是基于标记清除算法实现的。用于老年代的收集。 收集过程有四个阶段:1、初始标记 2、并发标记 3、重新标记 4、并发清除 四个阶段中初始标记和重新标记仍需要暂停所有的用户线程(Stop The World),但为什么说这个收集器也暂停了所有的线程,为什么还能做到停顿时间

qq_64680177的博客 3610

PCIE协议版--M.2接口规范V1.0中文版1——物理规格篇

5.1.3.双模块键模块:同时支持Socket1-DP、Socket1-SD。2.4.7.3.3.双面模块(使用H2.8、H3.2、H4.2连接器)6.5.8.2.5.热设计功率响应-带有风扇类别的薄平台笔记本电脑。2.3.7.1. Socket1&2射频连接器PIN-OUT。5.2.2.Socket2 PIN-OUT(机械KEY B)3.2.10.1.3.极薄的笔记本电脑的电源开关顺序的例子。5.1.1.Socket1-DP(机械KEY A)5.1.2.Socket1-SD(机械KEY E)

想你所想,做你所做 4673

matlab 点云泊松盘采样

本文介绍了泊松盘采样算法在三维点云处理中的应用。该算法通过最小间距约束(任意两点距离≥r)和均匀分布特性,生成高质量、均匀分布的点集。文章详细阐述了参数设置(如采样半径、候选点数),并与体素栅格、随机采样等方法进行了对比。代码实现部分展示了MATLAB版本的泊松盘采样算法,包括KD树加速和候选点生成机制。实验结果表明,该方法能有效保持点云特征,适用于点云简化、曲面重建等场景。文中还提供了参数调整建议和不同应用场景下的使用指导。

点云侠的博客 536

【JVM】7种经典的垃圾收集器

图中所示七种垃圾收集器虽然算不上先进技术,但是它们在实践中足够成熟,基本上可以认为是现在未来两、三年内,能够在生产环境上放心使用的所有垃圾收集器了。这七种垃圾收集器是作用于不同分代的,两个收集器之间若有连线,则说明它们可以搭配使用。垃圾收集器的位置则表示了属于新生代还是老年代收集器。串行吞吐量优先响应时间优先。

沉迷写代码的程序猿的博客 2671

硬件工程师学习-硬件的单元测试(UT)(1)电源与时钟的测试

我们在设计的时候,通过控制电源的上电使能管脚或者通过MOSFET、或者专用的电源上电控制芯片,控制不同电源的上电时序,以确保每个芯片的电源上电时序是满足芯片的要求的。我们在测试的时候,需要对相关的要求一一测试,以确认每个上电时序满足要求的。在维基百科中,相位噪声的定义是“时域不稳定性(抖动)导致波形在相位上发生快速、短期、随机的波动,这种波动在频域中的表现即为相位噪声”。单元测试,一般是指基于开发人员自行开展的功能测试及各个功能单元的单元测试,是硬件信号级的测试,分为基本测试和信号完整性测试。

qq_43416206的博客 4032

jvm中的不同垃圾收集器特点以及区别

jvm中的不同垃圾收集器特点以及区别

qq_42003636的博客 466

新政下的绿电直连项目经济性分析:模式创新与价值重构

随着全球气候治理与低碳转型进程不断加速,绿电直连作为新能源就近消纳的创新模式,正成为破解新能源消纳瓶颈、规避碳关税壁垒的核心路径。2025年9月,国家发展改革委、国家能源局发布《关于完善价格机制促进新能源发电就近消纳的通知》(1192号文),为绿电直连项目的经济性分析与效益测算提供了明确的政策依据。本文将基于新政框架,深入解析绿电直连项目的经济性影响因素、盈利模式与优化路径,并结合案例与量化模型,为项目投资决策提供系统参考。

getusushu的博客 135

AutoSar实战营 - 总目录

欢迎大家来学习《AutoSar实战营》专栏,该篇为总目录,方便以后大家直接进入需要学习的文章。 ~正所谓独乐乐不如众乐乐 - - ~1, AutoSar之DaVinci开发环境2,BswM模块之Ecu State Handling1)读写DID功能 《AutoSar实战》读写DID之一:CDD准备 《AutoSar实战》读写DID之二:工具链配置 《AutoSar实战》读写DID之三:代码实现2)功能寻址 《AutoSar实战》禁止功能寻址

weixin_48498880的博客 3623

JVM垃圾收集——垃圾收集器

垃圾收集器的发展和分类、Serial收集器、ParNew收集器、Parallel Scaveng收集器、CMS收集器、G1收集器、ZGC收集器

码说芯语的博客 2901

python基于pingouin统计分析:rm_corr计算两个变量之间的重复测量相关性(Repeated measures correlation、plot_rm_corr函数可视化重复测量相关性图

python基于pingouin包进行统计分析:使用rm_corr函数计算两个变量之间的重复测量相关性(Repeated measures correlation)、plot_rm_corr函数可视化重复测量相关性图

statistics+insight+vista+power 679

十二、七款经典垃圾收集器

十二、七款经典垃圾收集器GC分类评估GC的性能指标七款经典的垃圾收集器Serial回收器: 串行回收ParNew回收器: 并行回收Parallel回收器: 吞吐量优先CMS回收器: 低延迟工作原理CMS的优点CMS的弊端CMS的参数设置小结G1回收器: 区域化分代式介绍工作原理 GC分类 按线程数分,可以分为串行垃圾回收器和并行垃圾回收器 串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直到垃圾收集结束 在单CPU处理器或较小的应用内存等硬件平台不是特别优越

始末丶Yzx的博客 714

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【JVM进阶之路】七:垃圾收集器盘点

JVM进阶之路第七篇,盘点主流和前沿垃圾收集器。

三分恶的博客 3131

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【JVM】JVM垃圾收集器:G1垃圾收集器深入解析

在任意一次收集暂停中,CSet所有分区都会被释放,内部存活的对象都会被转移到分配的空闲分区中。在[ 整堆5%, 整堆60% ]的基础上,G1会计算下现在Eden区回收大概要多久时间,如果回收时间远远小于参数-XX:MaxGCPauseMills设定的值(默认200ms),那么增加年轻代的region,继续给新对象存放,不会马上做YoungGC。如果发现全局缓冲区日志积累较多,G1会调用更多的线程来出来缓冲区日志,甚至会调用App Thread 来处理,造成应用任务堵塞,所以必须要尽量避免这样的现象出现。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

jvm(五):垃圾收集器的种类

上文对垃圾收集的算法做了一个简单的梳理,但那些只是理论算法,并不是jvm中实际的收集器。本节将对这种不同的垃圾收集器做一个简单的阐述。 总的来说,jvm将内存空间(堆)分为老年代和新生代,然后垃圾收器是针对不同年代作用的。 上图显示了jvm中目前(1.7)采用的垃圾收集器,除了G1收集器外,其他收集器都是只服务于新生代和老年代中的一个。 连线表示新生代的垃圾收集器和老年代的垃圾收集器可以协

芙兰泣露的博客 2908

【JVM】垃圾收集器详解

垃圾收集器详解

关关的博客 1509

简要:JVM底层原理、JVM各类垃圾收集器的使用及核心参数的调优、JVM 调优

深入理解JVM(Java虚拟机)的底层原理,熟悉JVM各类垃圾收集器的使用及核心参数的调优,是Java开发者在性能优化和故障排查中不可或缺的技能。下面将从JVM的底层原理、垃圾收集器以及JVM调优等方面进行详细阐述。

猪猪 1026

常见的jvm垃圾收集器有哪些

场景推荐收集器理由个人电脑、小型测试开销最小,足够使用JDK 8 默认、计算密集型吞吐量优先,最大化计算效率JDK 8 及之前,Web应用响应时间优先,减少用户请求延迟JDK 9+ 默认,通用服务端G1在吞吐量和延迟间取得最佳平衡,大堆友好超大堆、极致低延迟ZGC(或Shenandoah停顿时间极短且可预测,适用于核心金融、实时系统演进路线Serial->Parallel(吞吐量) ->CMS(低延迟) ->G1(全堆、可预测停顿) ->(极致低延迟)

埃泽漫笔 787

从零开始学习JVM(九)- 垃圾收集器

垃圾收集器没有在Java虚拟机规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的垃圾收集器版本。

huangjhai的博客 1555

JVM之垃圾收集器

JVM垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法)的具体实现,不同JVM所提供的垃圾收集器可能会有很大差别。Java垃圾回收器为应用程序提供内存的自动分配、自动回收功能。

积跬步,至千里。 819

JVM:常用的垃圾收集器与调优技巧

垃圾收集器(Garbage Collector, GC)是Java虚拟机(JVM)中的一个关键组件,它自动地管理和释放不再使用的对象所占用的内存空间。这样可以防止内存泄漏,并简化了开发者的编程任务。

qq_45867699的博客 1586

JVM_垃圾收集器

注意:并行垃圾回收在单核CPU下可能会更慢。

m0_58617940的博客 1170

JVM的垃圾收集器

继上期简单介绍了一下JVM的基本知识与垃圾回收机制,本期来为大家介绍JVM中垃圾回收器迭代与特性。

2301_77061447的博客 1037

JVM调优:JVM中的垃圾收集器详解

JVM调优:JVM中的垃圾收集器详解,包括Serial垃圾收集器...

永远保持随时离开的技术能力! 1391
上一篇: JVM原理(四):JVM垃圾收集算法与分代收集理论
下一篇: JVM原理(六):JVM虚拟机未来最具发展力的两款垃圾收集器
依晴无旧
博客等级 码龄7年 1683粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值