前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2021-01-02:java中,MinorGC、MajorGC、FullGC 什么时候发生?

2021-01-02:java中,MinorGC、MajorGC、FullGC 什么时候发生?

原创
作者头像
福大大架构师每日一题
修改于 2021-01-04 02:14:24
修改于 2021-01-04 02:14:24
4050
举报

福哥答案2021-01-02:

MinorGC 在年轻代空间不足的时候发生。

MajorGC 指的是老年代的 GC,出现 MajorGC 一般经常伴有 MinorGC。

FullGC 老年代无法再分配内存;元空间不足;显示调用 System.gc;像 CMS 一类的垃圾回收器,在 MinorGC 出现 promotion failure 时也会发生 FullGC。

答案来自此链接:

MinorGC 一般指清理 Young space (Eden and Survivor spaces) 的 GC。例如 G1GC 还有 ShenandoahGC 中的 YoungGC. 触发一般是:

Allocation Failure: 分配对象失败,空间不足. 内存分配流程,涉及到了 bump-the-pointer, TLAB,Allocation Prematch 这些机制, 请参考。

Survivor 区满了,需要拷贝。

不同的 GC 还会有自己个性化的触发机制,例如 G1GC 还有Shenandoah GC 的 TLAB 分配失败剩余空间大于最大浪费空间直接在Eden分配也失败,ZGC 的预热触发等等。

MajorGC 一般指清理 Tenured space 的 GC。例如 G1GC 还有 ShenandoahGC 中的 OldGC. 一般由 MinorGC 触发,并且回收的空间依然不足,则可能触发 MajorGC。还有一些特殊的机制,例如 G1GC 的Homongous Allocation(大对象分配),在分配超过 RegionSize 一半大小的对象时,会触发 OldGC。 FullGC 一般指清理 所有 space 的 GC。触发时机一般是:

System.gc()被调用并且没有指定关闭显示GC,就是没有指定-XX:+DisableExplicitGC这个JVM flag。

老年代也满了。

堆外内存满了(JVM内存结构请参考:谁能给我详细讲解一下JVM的详细内存?),例如metaspace,代码即时编译缓存,直接内存,mmap内存。

gc 担保失败,请参考:-XX:-HandlePromotionFailure。


评论

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java运行时数据区和常用指令以及垃圾回收的简单介绍
对于long的处理(store and load),多数虚拟机的实现都是原子的jls17.7,没必要加volatile
@派大星
2023/06/28
2260
Java运行时数据区和常用指令以及垃圾回收的简单介绍
jvm触发full gc条件(Linux内存管理机制)
GC,即就是Java垃圾回收机制。目前主流的JVM(HotSpot)采用的是分代收集算法。作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题。与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用。即:从gcroot开始,把所有可以搜索得到的对象标记为存活对象。缺点就是:1. 有可能不知不觉浪费了很多内存。2. JVM花费过多时间来进行内存回收。3. 内存泄露
全栈程序员站长
2022/07/28
2.7K0
jvm触发full gc条件(Linux内存管理机制)
CMS发生FullGc分析
老年代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行Full GC后空间仍然不足,则抛出如下错误:
春哥大魔王
2020/07/02
2.6K0
CMS发生FullGc分析
JVM面试题
2) 每个方法执行都会创建一个栈帧,用于存放局部变量表,操作栈,动态链接,方法出口等。每个方法从被调用,直到被执行完。对应着一个栈帧在虚拟机中从入栈到出栈的过程。
袁新栋-jeff.yuan
2020/08/26
3960
持续3分钟 - Java -03
Java 堆从 GC 的角度还可以细分为: 新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代。
子乾建建-Jeff
2020/06/29
3300
持续3分钟 - Java -03
JVM-年轻代、老年代学习
JVM-年轻代、老年代学习 在JVM中,堆又会被细化分为俩个区域 新生代(Young)1/3 Eden区 8/10 From Survivor区(S0) 1/10 To Survivor区(S1) 1/10 老年代(Old)2/3 MinorGC 通常情况下,新创建的对象都会被分配到Eden区(朝生夕死),一些特殊的大对象会直接分配到Old区(可通过参数设置大对象大小的标准)。虽然会优先在TLAB分配对象,但其容量其实很小。 在经历了MinorGC后,Eden区和From Survivor区中存活的
晓果冻
2022/09/08
3010
JVM-年轻代、老年代学习
当小白遇到FullGC
Tech 导读 本文记录了一次排查FullGC导致的TP99过高过程,介绍了一些排查时思路,线索以及工具的使用,希望能够帮助一些新手在排查问题没有很好的思路时,提供一些思路,让小白也能轻松解决FullGC问题;文中实际提到的参数配置不一定适合其他业务场景,在调优自己的项目时还是需要实际试验过才能得出最佳参数配置。
京东技术
2023/09/21
3080
当小白遇到FullGC
JVM学习第二天(垃圾回收器和内存分配策略)大章
说道垃圾回收器大家应该都会有所了解,GC白,当然说道具体的可能就不是很清楚了,今天我们就来玩一玩;
彼岸舞
2020/09/30
4530
运行时数据区 Krains 2020-08-01
其中虚拟机栈、程序计数器、本地方法栈是线程私有的,也就是说每个线程都会维护自己的一份虚拟机栈、程序计数器、本地方法栈,而方法区和堆是所有线程共享的。
Krains
2020/08/05
3620
运行时数据区  Krains 2020-08-01
JVM调优之NO FullGC
FullGC是对整个堆进行垃圾回收, 会引起STW(stop the world),影响整个服务的运行.
一个架构师
2022/06/20
4610
JVM调优之NO FullGC
JVM初探 -JVM内存模型
Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。经过这么长时间的发展,Java GC机制已经日臻完善,几乎可以自动的为我们做绝大多数的事情。
哲洛不闹
2018/09/14
9800
JVM初探 -JVM内存模型
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day35】—— JVM2
  本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。
陈哈哈
2021/12/31
3200
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day35】—— JVM2
常见 JVM 面试题+“答案”, 听说发完年终奖你就需要它了
有些面试题是开放性的,有些是知识性的,注意区别。面试并没有标准答案,尤其是开放性题目,你需要整理成白话文,来尽量的展示自己。
用户4172423
2021/02/25
3870
常见 JVM 面试题+“答案”, 听说发完年终奖你就需要它了
年轻代与老年代的调优笔记
年轻代(young 区) 从年轻代空间(包括Eden和Survivor 区域)回收内存被称为 Minor GC 空间太小可能导致对象直接进入 old区 。如果old区 满了,会触发full gc。但也不能过大,过大会引起回收耗时过长,导致应用阻塞。
飞天小子
2019/09/18
4K0
jvm之堆上的GC和分代思想解读
JVM在进行GC时,并非每次都对上面三个内存区域一起回收的,大部分时候回收的都是指新生代。
一个风轻云淡
2023/10/15
3480
jvm之堆上的GC和分代思想解读
JVM堆
堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。
麋鹿大哥
2020/08/19
3920
深入理解JVM垃圾收集机制(JDK1.8)
垃圾收集算法 标记-清除算法 最基础的收集算法是“标记-清除”(Mark-Sweep)算法,分两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。 不足:一个是效率问题,标记和清除两个过程的效率都不高;另一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能导致以后在程序运行过程需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一个的垃圾收集动作。 复制算法 为了解决效率问题,一种称为复制(Copying)的收集算法出现了,它将可用内存按容量划分为大
Ryan-Miao
2018/03/21
4.8K0
深入理解JVM垃圾收集机制(JDK1.8)
JVM的垃圾回收算法
JVM的垃圾回收算法 一,如何判断对象已经消亡 1,引用计数算法 一个对象如果没有任何引用指向它,就可认为该对象已经”消亡“,这种方法有个缺点就是无法检测到引用环的存在。 算法特点 1. 需要单独的字段存储计数器,增加了存储空间的开销; 2. 每次赋值都需要更新计数器,增加了时间开销; 3. 垃圾对象便于辨识,只要计数器为0,就可作为垃圾回收; 4. 及时回收垃圾,没有延迟性; 5. 不能解决循环引用的问题; 2,根搜索算法 Java使用根搜索算法回收垃圾,该算法的基本原理:定义一系列名为GC Roots的
Spark学习技巧
2018/01/30
6350
JVM的垃圾回收算法
java架构之路-(面试篇)JVM虚拟机面试大全
  下文连接比较多啊,都是我过整理的博客,很多答案都在博客里有详细说明,理解记忆是最扎实的记忆。而且我的答案不一定是最准确的,但是我的答案不会让你失望,而且几乎每个答案都是问题的扩展答案。
小菜的不能再菜
2019/10/09
3900
java架构之路-(面试篇)JVM虚拟机面试大全
java栈内存初始化,阿里面试官:小伙子,你给我说一下JVM对象创建与内存分配机制吧…
虚拟机遇到一条new指令(new关键字、对象的克隆、对象的序列化等)时,会先去检查这个指令的参数在常量池中定位到一个类的符号引用,并且这个符号引用代表的类是否应被加载过,如果没有那么就去加载该类
全栈程序员站长
2022/08/28
3290
java栈内存初始化,阿里面试官:小伙子,你给我说一下JVM对象创建与内存分配机制吧…
相关推荐
Java运行时数据区和常用指令以及垃圾回收的简单介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档