【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是开发或调优中尽量要避免的。这样暂停时间会短一些
相关推荐
DKPT6 小时前
ZGC和G1收集器相比哪个更好?
java·jvm·笔记·学习·spring
低客的黑调7 小时前
为你的项目选择一个适合的[垃圾收集器]
java·jvm·算法
xu_yule10 小时前
Linux_14(多线程)线程控制+C++多线程
java·开发语言·jvm
豆奶特浓612 小时前
Java面试生死局:谢飞机遭遇在线教育场景,从JVM、Spring Security到AI Agent,他能飞吗?
java·jvm·微服务·ai·面试·spring security·分布式事务
Boop_wu13 小时前
[Java EE] 多线程进阶(JUC)(2)
java·jvm·算法
3***312116 小时前
java进阶1——JVM
java·开发语言·jvm
打工人你好2 天前
如何设计更安全的 VIP 权限体系
java·jvm·安全
unclecss2 天前
把 Spring Boot 的启动时间从 3 秒打到 30 毫秒,内存砍掉 80%,让 Java 在 Serverless 时代横着走
java·jvm·spring boot·serverless·graalvm
q***2512 天前
java进阶1——JVM
java·开发语言·jvm
zlpzlpzyd2 天前
jvm 偏向锁禁用以及移除
jvm