欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

java发生fullgc的时机_2021-01-02:java中,MinorGC、MajorGC、FullGC 什么时候发生?

发布时间:2023/12/15 编程问答 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java发生fullgc的时机_2021-01-02:java中,MinorGC、MajorGC、FullGC 什么时候发生? 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

福哥答案2021-01-02:

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

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

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

[答案来自此链接:](https://www.zhihu.com/question/437493648)

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。

***

[评论](https://user.qzone.qq.com/3182319461/blog/1609543471)

总结

以上是生活随笔为你收集整理的java发生fullgc的时机_2021-01-02:java中,MinorGC、MajorGC、FullGC 什么时候发生?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。