JVM系列(九):MinorGC、MajorGC、FullGC垃圾回收介绍
今天给大家继续分享MinorGC、MajorGC、FullGC相关知识,如有不对的地方欢迎指正!
1、MinorGC (新生代垃圾回收)
JDK1.8 堆内部结构
从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,也叫Young GC。因为Java对象大多具备朝生夕死的特征,所以MinorGC非常频繁,一般回收速度也比较快。一般采用复制算法。
说明:Minor GC可能会引发STW,暂停其他用户的线程,需要等JVM垃圾回收结束后,用户线程才恢复运行。
Minor GC 触发条件
-
Eden伊甸园区满了
-
新new的对象需要分配到新生代的Eden伊甸园区,当Eden区的空间不够的时候需要进行MinorGC策略回收,
2、Major GC(老年代垃圾回收)
Major GC指发生在老年代的GC。
Major GC触发条件
老年代空间不足时,会先尝试触发Minor GC。Minor GC之后空间还不足,则会触发Major GC。
说明:发生在老年代的GC ,基本上进行一次Major GC 就会伴随进行一次 Minor GC。Major GC 的速度一般会比 Minor GC 慢 10 倍,并且STW的时间更长。
3、Full GC (新生代+老年代垃圾回收)
Full GC可以理解为Major GC+Minor GC组合后进行的一整个过程,是清理JVM整个堆空间(年轻代和老年代空间)。
Full GC触发条件
-
调用System.gc()方法时,可通过-XX:+ DisableExplicitGC 参数来禁止调用System.gc()
-
当方法区空间不足时
-
Minor GC后存活的对象大小超过了老年代剩余空间
-
Minor GC时中Survivor幸存区空间不足时,判断是否允许担保失败,不允许则触发Full GC。允许,并且每次晋升到老年代的对象平均大小>老年代最大可用连续内存空间,也会触发Full GC
-
CMS GC异常,CMS运行期间预留的内存无法满足程序需要,就会出现一次“Concurrent Mode Failure”失败,会触发Full GC
STW(Stop The World):垃圾回收发生过程中,会产生应用程序的停顿现象。停顿产生的时候整个应用程序线程都会被暂停,有点应用程序像卡死的情况。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-06-08 电脑处理器i5和i7的区别,如何选择?
2019-06-08 电脑处理器i5和i7的区别,如何选择?
2018-06-08 9本Java程序员必读的书
2018-06-08 9本Java程序员必读的书
2018-06-08 9本Java程序员必读的书
2017-06-08 关于ASP.NET WebForm与ASP.NET MVC的比较
2017-06-08 【原创】关于ASP.NET WebForm与ASP.NET MVC的比较