JVM系列:MinorGC、MajorGC、FullGC垃圾回收

开发 前端
从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,也叫Young GC。因为Java对象大多具备朝生夕死的特征,所以MinorGC非常频繁,一般回收速度也比较快。一般采用复制算法。​

​今天给大家继续分享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):垃圾回收发生过程中,会产生应用程序的停顿现象。停顿产生的时候整个应用程序线程都会被暂停,有点应用程序像卡死的情况。​

责任编辑:武晓燕 来源: IT技术分享社区
相关推荐

2022-06-10 07:13:29

JVM垃圾回收

2023-12-07 12:21:04

GCJVM垃圾

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2022-01-20 10:34:49

JVM垃圾回收算法

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2023-08-08 10:29:55

JVM优化垃圾回收

2021-11-05 15:23:20

JVM回收算法

2009-12-30 10:14:29

JVM垃圾回收

2010-09-25 15:33:19

JVM垃圾回收

2022-06-22 09:54:45

JVM垃圾回收Java

2010-09-26 16:42:04

JVM内存组成JVM垃圾回收

2010-09-27 09:01:26

JVM分代垃圾回收

2020-03-03 17:35:09

Full GCMinor

2010-09-25 15:26:12

JVM垃圾回收

2010-09-16 15:10:24

JVM垃圾回收机制

2017-04-25 14:39:55

JVM内存Java

2009-12-25 16:15:31

JVM垃圾回收算法

2021-10-05 20:29:55

JVM垃圾回收器

2012-01-09 16:53:36

JavaJVM

2024-03-11 16:27:02

垃圾回收器JVM
点赞
收藏

51CTO技术栈公众号