【jvm】MinorGC、MajorGC和FullGC

目录

        • 一、说明
        • [二、年轻代GC(Minor GC)触发机制](#二、年轻代GC(Minor GC)触发机制)
        • [三、老年代GC (Major GC/Full GC)触发机制](#三、老年代GC (Major GC/Full GC)触发机制)
        • [四、Full GC触发机制](#四、Full GC触发机制)
一、说明
  • 1.jvm调优的主要目的是GC的时间少一些,用户线程执行的时间多一些
  • 2.主要侧重于MajorGC和FullGC,这两块的GC产生的暂停时间比MinorGC产生的暂停时间大10倍以上
  • 3.JVM在进行GC时,并非每次都对上面三个内存(新生代、老年代;方法区)区域一起回收的,大部分时候回收的都是指新生代。
  • 4.针对Hotspot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集 (Full GC)
  • 5.部分收集:不是完整收集整个Java堆的垃圾收集
  • 6.其中又分为:新生代收集 (Minor GC / Young GC): 只是新生代(Eden,S0,S1)的垃圾收集
  • 7.老年代收集 (Major GC / Old GC): 只是老年代的垃圾收集。目前,只有CMS GC会有单独收集老年代的行为。注意,很多时候Major GC会和Full GC混淆使用,需要具体分辨是老年代回收还是整堆回收。
  • 8.混合收集 (Mixed GG): 收集整个新生代以及部分老年代的垃圾收集。目前,只有G1 GC会有这种行为
  • 9.整堆收集(Full GC): 收集整个java堆和方法区的垃圾收集。
二、年轻代GC(Minor GC)触发机制
    1. 当年轻代空间不足时,就会触发Minor GC,这里的年轻代满指的是Eden区满,survivor满不会引发GC。
    1. 每次 Minor GC会清理年轻代的内存。
    1. 因为 Java 对象大多都具备朝生夕灭的特性,所以 Minor GC 非常频繁,一般回收速度也比较快。
    1. minor GC会引发StopTheWorld,暂停其它用户的线程,等垃圾回收结束,用户线程才恢复运行。
三、老年代GC (Major GC/Full GC)触发机制
    1. 指发生在老年代的GC,对象从老年代消失时,我们说"Major Gc"或"Ful GC"发生了。
    1. 出现了Major GC,经常会伴随至少一次的Minor GC(但非绝对的,在Parallel Scavenge收集器的收集策略里就有直接进行Major GC的策略选择过程)。也就是在老年代空间不足时,会先尝试触发Minor GC。如果之后空间还不足则触发Major GC
    1. Major GC的速度一般会比Minor GC慢10倍以上,STW的时间更长
    1. 如果Major GC 后,内存还不足,就报OOM了。
四、Full GC触发机制
    1. 触发Full GC 执行的情况有如下五种:
    1. 调用System.gc()时,系统建议执行Full GC,但是不必然执行
    1. 老年代空间不足
    1. 方法区空间不足
    1. 通过Minor GC后进入老年代的平均大小大于老年代的可用内存
    1. 由Eden区、survivor space0 (From Space) 区向survivor space1 (To Space) 区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代的可用内存小于该对象大小
    1. full gc是开发或调优中尽量要避免的。这样暂停时间会短一些
相关推荐
源分享16 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
JAVA96516 天前
JAVA面试-JVM篇 03-JVM运行时数据区哪些是线程私有的哪些是共享的
java·jvm·面试
伶俜6617 天前
鸿蒙原生应用实战(十八)ArkUI 记账本:SQLite 账单 + 图表统计 + 分类管理
jvm·sqlite·harmonyos
IronMurphy17 天前
多线程问!
java·jvm·spring
unique17 天前
AI Coding 采集方案探索
jvm·人工智能·oracle
cfm_291417 天前
JVM GC日志解析
jvm
不良使17 天前
鸿蒙PC迁移:使用Electron`logseq-master-ohos` 鸿蒙适配全记录
jvm·electron·harmonyos
cfm_291417 天前
JVM深度详解:Class常量池、运行时常量池、字符串常量池、包装类对象池
java·jvm
JAVA96518 天前
JAVA面试-JVM篇 02-G1垃圾收集器的工作原理是什么与CMS的区别
java·jvm·面试