gpt4 book ai didi

java - Full GC 什么时候触发?

转载 作者:行者123 更新时间:2023-11-30 12:02:19 24 4
gpt4 key购买 nike

据我了解:

次要 GC

发生在年轻一代的 GC 通常称为次要,因为它需要更少的时间来完成,因为 live-set 通常很小(我说的是典型的 java 应用程序,考虑到弱世代假说)和一个复制收集器,需要重新定位和重新映射的对象数量较少。

主要 GC

发生在老一代的 GC 通常被称为 Major GC,因为它需要更多时间来完成,因为 live-set 大部分都很大(与年轻一代相比)并且它通常会压缩旧的gen 和 compaction 的时间随着老年代的大小线性增加。

不幸的是,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/58678599/

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