每日一面 - java中,MinorGC、MajorGC、FullGC 什么时候发生?

简介: 每日一面 - java中,MinorGC、MajorGC、FullGC 什么时候发生?
问题引用自: https://www.zhihu.com/question/437493648/answer/1656737915,答案为个人原创

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

一般的,我们现在不会去太关心到底是哪种 GC,而是主要关心哪些 GC STW的时间长,导致所有线程停止工作的时间长,关于为何会 STW 以及所有出发 STW 的 JVM机制以及如何优化,请参考我的另一篇文章: JVM相关 - SafePoint 与 Stop The World 全解

想模拟 GC 的各种情况,可以通过 WhiteBox API,参考:JVM 相关 - 深入 JVM 的钥匙 WhiteBox API

关于如何通过日志查看 GC 详情,请参考:OpenJDK 11 JVM日志相关参数解析与使用

关于如何通过 JFR 快速可视化定位 GC 问题,请参考: JFR全解



相关文章
|
8月前
|
存储 安全 Java
[Java] 阿里一面~说一下ArrayList 与 LinkedList 区别
[Java] 阿里一面~说一下ArrayList 与 LinkedList 区别
162 1
|
负载均衡 NoSQL Java
阿里Java一面,难度适中!(下篇)
阿里Java一面,难度适中!(下篇)
163 0
阿里Java一面,难度适中!(下篇)
|
NoSQL Java 测试技术
淘天Java一面,难度适中!(上篇)
淘天Java一面,难度适中!(上篇)
104 1
|
8月前
|
Java
[Java 源码] 美团一面~ArrayList 的底层实现
[Java 源码] 美团一面~ArrayList 的底层实现
|
8月前
|
存储 Java
[JVM] 京东一面~说一下Java 类加载过程
[JVM] 京东一面~说一下Java 类加载过程
|
Dubbo Java 应用服务中间件
阿里一面:说一说Java、Spring、Dubbo三者SPI机制的原理和区别
大家好,我是三友~~ 今天来跟大家聊一聊Java、Spring、Dubbo三者SPI机制的原理和区别。 其实我之前写过一篇类似的文章,但是这篇文章主要是剖析dubbo的SPI机制的源码,中间只是简单地介绍了一下Java、Spring的SPI机制,并没有进行深入,所以本篇就来深入聊一聊这三者的原理和区别。
|
缓存 NoSQL 安全
【腾讯一面】我对我的Java基础不自信了
【腾讯一面】我对我的Java基础不自信了
156 0
【腾讯一面】我对我的Java基础不自信了
|
人工智能 分布式计算 网络协议
【个人百度一面】----Java后端开发岗位----【校招提前批】
【个人百度一面】----Java后端开发岗位----【校招提前批】
141 0
【个人百度一面】----Java后端开发岗位----【校招提前批】
|
存储 SQL 网络协议
好友阿里一面后端Java开发秋招题目
好友阿里一面后端Java开发秋招题目
149 0
好友阿里一面后端Java开发秋招题目
|
存储 缓存 算法
每日一面 - 聊一聊Java为何需要平衡方法调用与内联
每日一面 - 聊一聊Java为何需要平衡方法调用与内联
每日一面 - 聊一聊Java为何需要平衡方法调用与内联