垃圾回收器

本文详细介绍了Java中的七大垃圾收集器,包括Serial、ParNew、ParallelScavenge、SerialOld、ParallelOld、CMS和G1。每种收集器的特点、适用场景和算法策略进行了阐述,如Serial适合小内存、单线程环境,而G1则追求低停顿时间并具备空间整合能力。了解这些收集器有助于优化Java应用的性能和响应时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回收器集合
在这里插入图片描述
一:Serial 收集器
特点:单线程、简单高效
二:ParNew收集器
特点:多线程、
三:Parallel Scavenge 收集器
特点:属于新生代收集器也是采用复制算法的收集器,又是并行的多线程收集器(与ParNew收集器类似
四:Serial Old 收集器
特点:同样是单线程收集器,采用标记-整理算法
五:Parallel Old 收集器
特点:多线程,采用标记-整理算法。
六:CMS收集器
特点:基于标记-清除算法实现。并发收集、低停顿
七:G1收集器
特点:
并行与并发:G1能充分利用多CPU、多核环境下的硬件优势,使用多个CPU来缩短Stop-The-World停顿时间。部分收集器原本需要停顿Java线程来执行GC动作,G1收集器仍然可以通过并发的方式让Java程序继续运行。

分代收集:G1能够独自管理整个Java堆,并且采用不同的方式去处理新创建的对象和已经存活了一段时间、熬过多次GC的旧对象以获取更好的收集效果。

空间整合:G1运作期间不会产生空间碎片,收集后能提供规整的可用内存。

可预测的停顿:G1除了追求低停顿外,还能建立可预测的停顿时间模型。能让使用者明确指定在一个长度为M毫秒的时间段内,消耗在垃圾收集上的时间不得超过N毫秒。

1.串行
单线程
堆内存较小,适合个人电脑
-xx:useserialgc=serial+serialold
在这里插入图片描述
当发生gc时,所有的用户程序会先到达安全点停止下来,再让回收线程进行回收,避免用户线程对垃圾回收线程产生影响。

2.吞吐量优先(即CPU用于运行用户代码的时间与CPU总消耗时间的比值(吞吐量 = 运行用户代码时间 / ( 运行用户代码时间 + 垃圾收集时间 )))
多线程
堆内存较大,多核cpu
单位时间内,stw的时间最短
-xx:useparallerlgc+useparalleoldgc
在这里插入图片描述
垃圾回收线程与cpu的核数有关。

3.响应时间优先
多线程
堆内存较大,多核cpu
让单次的stw的时间尽可能的短
-xx:useconcmarksweepgc -xx:useparnewgc~serialold
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值