gpt4 book ai didi

java - 什么时候触发 Full GC?

转载 作者:行者123 更新时间:2023-12-01 00:59:29 25 4
gpt4 key购买 nike

按照我的理解:
次要 GC
发生在年轻代的 GC 通常称为 Minor,因为它需要 完成的时间通常很小(我说的是典型的 Java 应用程序,考虑到弱分代假设)和一个复制收集器,需要重新定位和重新映射的对象数量较少。
主要 GC
发生在旧代中的 GC 通常称为 Major GC,因为它需要 更多 由于 live-set 的完成时间大部分是大的(与年轻代相比),它通常会压缩老代,并且压缩时间随着老一代的大小线性增加。
不幸的是,GC 日志将老年代收集报告为 Full GC,而仅收集老年代。但是在 Java 内存管理白皮书中,有一个 Full GC 的概念,其中收集整个堆。

A Full GC will be triggered whenever the heap fills up. In such a case the 
young generation is collected first followed by the old generation. If the
old generation is too full to accept the content of the young generation,
the young generation GC is omitted and the old generation GC is used to
collect the full heap, either in parallel or serial. Either way the whole
heap is collected with a stop-the-world event.
如果年轻代填满时总是有一个 Minor GC,如果老一代填满时总是有一个 Major GC,那么所谓的 Full GC 什么时候发生?如果年轻一代和老一代收集器都在尽自己的一份力,堆怎么会变满?

最佳答案

当区域大小发生变化时,会发生年轻代和年老代都被收集的 Full GC。

例如,如果我们提到
-Xms1024m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=1024m
JVM 最初以 1GB 的堆开始,但为操作系统保留了 2GB 的空间。因此,随着这些区域使用量的增加,基于 VM 的人体工程学,年轻代和年老代会被调整大小,直到它们达到 2GB 的最大保留大小。

同样的事情也适用于 PermSize,每次 PermGen 调整大小时,都会发生完整的 GC。

关于java - 什么时候触发 Full GC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24766118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com