gpt4 book ai didi

Java - 为什么 GC 时间会随着堆的增长(就容量而言)而增加?

转载 作者:行者123 更新时间:2023-12-01 18:11:21 25 4
gpt4 key购买 nike

至少在旧的 GC 中,这是正确的。 (我知道有像 ZGC 和 Shenandoah 这样的新项目旨在消除这种情况)

据我所知,GC 会跟踪存活对象,因此 GC 时间不应该主要受对象数量(存活/需要清除)的影响吗?

编辑:我的意思是容量的增长,意味着更大的堆,但应用程序对它的利用率相同

最佳答案

你没有回答你自己的问题吗?

As far as I know GC keeps tracks of living objects, so shouldn't the GC times be mostly affected by the number of objects (living/needs to be cleared)?

堆增长得越多,它拥有的 Activity 对象就越多,GC 就越慢(我确信这个规则有异常(exception),特别是对于小型集合,但这只是粗略的想法)。要清除的对象数量无关紧要,最重要的是存活对象的总数。现在,如果您的堆由于存储长期存在的对象而增长,那么只要您不继续添加越来越多的对象,就可能没问题。最终,长期存在的对象将移向幸存者空间,并且只会受到主要收集的影响,而不会受到次要收集的影响。只要 Minor GC 始终从年轻代中释放出足够的内存,就不会在所有对象(包括长生命周期对象)上触发 Major GC。

我还观察到 G1 的不同行为。我们有一个低延迟应用程序(40ms p99),因此我们尝试将 G1 配置为进行非常短的暂停(不记得有多少,可能是 5ms 左右)。发生的情况是,G1 或多或少达到了 5 毫秒的目标,但它必须非常频繁地运行,因为 5 毫秒不足以处理我们堆中的所有死对象。因此,随着堆大小的增加,单个垃圾收集运行会变慢并不完全正确,但在给定时间段内垃圾收集所花费的平均时间很可能会增加。

关于Java - 为什么 GC 时间会随着堆的增长(就容量而言)而增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60464538/

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