gpt4 book ai didi

java - 年老代需要多满才能触发主 GC 周期?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:10 28 4
gpt4 key购买 nike

我正在努力解决我们生产环境中垃圾收集利用率高的问题,我想知道设置一个大的堆大小来保证老年代永远不会被填满是否会阻止触发主要的 GC 周期。

为了实现这一点,我想有一个特定的阈值标记会触发主要的 GC 周期。如果这个假设是真的,有人可以告诉我这个数字是多少吗?如果没有,我将不胜感激解释这些主要周期实际上是如何触发的,以及我的大堆策略是否有可能发挥作用。

最佳答案

并发标记清除

假设您使用 Concurrent Mark Sweep 收集器(例如 -XX:+UseConcMarkSweepGC),默认情况下,它会在 OldGen 达到 70% 时开始并发收集。但它可以通过 CMSInitiatingOccupancyFraction 进行调整,例如:

-XX:CMSInitiatingOccupancyFraction=42

这将以 42% 与默认的 70% 开始并发收集

请注意,CMSInitiatingOccupancyFraction 仅对第一次收集有效。要“永远”启用它,请添加 UseCMSInitiatingOccupancyOnly:

-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=42

最大堆空闲比率

您还可以查看 MaxHeapFreeRatio,它是 GC 避免收缩后 堆空闲的最大百分比,它设置为 70%默认情况下,但您也可以更改它:

-XX:MaxHeapFreeRatio=42

追根究底

但在更改任何参数之前,最好了解这种“垃圾收集利用率高”的原因:

  • 如果需要如此频繁地收集它,为什么它会到达 OldGen?
  • 您在捕获流数据吗?
  • 堆大小太小会不会有问题?
  • 将此特定数据存储在堆外是否有意义?
  • 等..

因为通常 JVM 非常擅长知道何时收集,而且它只会变得更好。


其他HоtSpot VM options

关于java - 年老代需要多满才能触发主 GC 周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23176974/

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