JVM之GC(jvm之二)

本文详细介绍了Java内存管理中的MinorGC、MajorGC和FullGC过程。MinorGC针对年轻代进行清理,MajorGC处理老年代空间,而FullGC则涉及整个堆空间和永久代。触发FullGC的场景包括System.gc调用、年代晋升失败、CMS并发模式失败以及新生代晋升平均大小超过老年代剩余空间。不同的垃圾收集器如G1、CMS和ParalOld在FullGC时使用不同的策略。

摘要生成于 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、付费专栏及课程。

余额充值