每日一面 - java中,MinorGC、MajorGC、Ful

2021-01-02  本文已影响0人  干货满满张哈希

问题引用自: https://www.zhihu.com/question/437493648/answer/1656737915,答案为个人原创

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

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

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

一般的,我们现在不会去太关心到底是哪种 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全解

通过JFR与日志深入探索JVM

上一篇下一篇

猜你喜欢

热点阅读