【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是开发或调优中尽量要避免的。这样暂停时间会短一些
相关推荐
WizLC8 小时前
【JAVA】JVM类加载器知识笔记
java·jvm·笔记
CodeAmaz9 小时前
Java 垃圾回收(GC)算法详解
java·jvm·算法·垃圾回收算法
漫漫求11 小时前
Java内存模型【JMM】、JVM内存模型
java·开发语言·jvm
dddaidai12313 小时前
深入JVM(三):JVM执行引擎
java·jvm
小羊学伽瓦15 小时前
ThreadLocal
java·jvm·算法
脸大是真的好~15 小时前
JVM面试题相关-中级
jvm
利刃大大16 小时前
【JavaSE】十九、JVM运行流程 && 类加载Class Loading
java·开发语言·jvm
福尔摩斯张17 小时前
Linux Kernel 设计思路与原理详解:从“一切皆文件“到模块化架构(超详细)
java·linux·运维·开发语言·jvm·c++·架构
deng-c-f17 小时前
Linux C/C++ 学习日记(51):内存池
jvm·学习
没有bug.的程序员17 小时前
SOA、微服务、分布式系统的区别与联系
java·jvm·微服务·架构·wpf·日志·gc