gpt4 book ai didi

java - 我们是否可以手动触发 Full GC,或者使用堆的某个百分比的参数来触发 Full GC,这是建议的吗?

转载 作者:行者123 更新时间:2023-12-02 12:20:13 28 4
gpt4 key购买 nike

我正在研究数字图像处理。当我尝试加载更高分辨率的图像时,我遇到了很多 OOM 问题。

我正在将这些启动参数与应用程序一起使用

-Xms10240m -Xmx10240m -XX:NewRatio=3 -XX:+PrintFlagsFinal -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

我无法承担增加堆内存的费用。

那么,如果可能的话,我可以在堆的一定百分比处手动触发 Full 吗?运行手册是建议操作吗??

最佳答案

您可以通过调用 System.gc() 向 JVM 发出请求以触发 GC。 API 文档称,这“表明 Java 虚拟机努力回收未使用的对象”。如果您使用 Oracle 的 HotSpot JVM,那么每次调用它时它都会运行一次完整的 GC。

但是,这不太可能(正如评论中所述)解决您的问题。 GC 非常擅长回收不再需要的空间,因此您遇到的 OOM 异常很可能是由于您的堆只有 1Gb 内存。您的图像有多大?您要同时处理多少张图像?您应该能够进行一些简单的数学计算来计算出所需的最小堆大小。

您有以下两个论点:

-XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80

这意味着 JVM 正在等待堆填满 80%,然后再启动并发收集器。尝试降低此值。不能保证,但它可能会改善情况。

关于java - 我们是否可以手动触发 Full GC,或者使用堆的某个百分比的参数来触发 Full GC,这是建议的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45847431/

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