gpt4 book ai didi

Java 内存泄漏 Finalizer 您的工具包

转载 作者:太空宇宙 更新时间:2023-11-04 10:00:01 25 4
gpt4 key购买 nike

我的网络服务器存在内存泄漏。旧一代的使用量突然激增,然后服务器的延迟出现峰值。当我使用你的工具包进行堆转储和分析时,它表明 Finalizer 对象占用了 100% 的内存。但我无法理解为什么 gc 使用率仅在某个时间点很高,并且不会定期发生(比如每周发生一次)。

我还观察到,当我使用该终结器对象时,您的套件上有一个按钮“计算精确的保留大小”,该按钮不会显示在更新的列表中。

我附上了您的套件的屏幕截图。

此外,如果有一种方法我可以获取堆转储中出现终结器的所有类的列表。

按下前计算保留尺寸

Before pressing calculate retained size

按下后计算保留尺寸:

after pressing calculate retained size

最佳答案

根据YourKit docs: Class List页面:

On opening the view, estimated retained sizes are shown instead of exact sizes, which cannot be immediately calculated. The exact sizes may be obtained by using "Calculate exact retained sizes" balloon above the "Retained Size" column. However, for most classes the estimation is very close to the exact value, so there is almost no need to run exact size calculation.

java.lang.ref.Finalizer 是由覆盖 Object.finalize() 方法的对象创建的,因为它们必须在后台收集。最好的选择是检查堆转储并找出哪个类正在使用finalize()。理想情况下不要依赖此方法,因为它的行为往往是不可预测的。

如果您每周只有一次 GC 使用率较高,请尝试获取 GC 日志或使用 FlightRecorder 记录 JVM 行为。也许您每周只获得一次 stop the world 完整 GC 周期?如果不查看日志和 JVM 配置,就无法判断。

关于Java 内存泄漏 Finalizer 您的工具包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53639819/

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