JVM之GC(jvm之二)

本文详细解析了Java堆内存管理中的Minor GC、Major GC和Full GC,包括它们的触发机制: Minor GC因Young Gen内存不足,Major GC由Old Gen空间不足引起,而Full GC则涉及整个堆的清理。讨论了Full GC的常见触发场景,如System.gc、晋升失败和CMS回收过程中的并发模式失败。

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

对象从新生代区域消失的过程,我们称之为 "minor GC"

对象从老年代区域消失的过程,我们称之为 "major GC"
Minor GC
清理整个YouGen的过程,eden的清理,S0\S1的清理都会由于MinorGC Allocation Failure(YoungGen 区内存不足),而触发minorGC
Major GC
OldGen区内存不足,触发Major GC
Full GC 
Full GC 是清理整个堆空间包括年轻代和永久代
Full GC 触发的场景
1System.gc
2promotion failed (年代晋升失败,比如eden区的存活对象晋升到S区放不下,又尝试直接晋 升到Old 区又放不下,那么Promotion Failed,会触发FullGC)
3CMSConcurrent-Mode-Failure 由于CMS回收过程中主要分为四步:
             1⃣️CMS initial mark
             2⃣️CMS Concurrent mark
             3⃣️CMS remark
             4⃣️CMS Concurrent sweep
2gc线程与用户线程同时执行,那么用户线程依旧可 能同时产生垃圾, 如果这个垃圾较多无法放入预留的空间就会产生CMS-Mode-Failure, 切换 为SerialOld单线程做marksweep-compact。
4)新生代晋升的平均大小大于老年代的剩余空间 (为了避免新生代晋升到老年代失败) 当使用
G1,CMS 时,FullGC发生的时候 是 Serial+SerialOld。 当使用ParalOld时,FullGC发生的时候是
ParallNew +ParallOld.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值