gpt4 book ai didi

java - 当内存占用超过一定阈值时强制进行全面垃圾回收

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:53:56 24 4
gpt4 key购买 nike

我有一个服务器应用程序,在极少数情况下,它可以分配大块内存。

这不是内存泄漏,因为垃圾收集器可以通过执行完整的垃圾收集来收回这些 block 普通垃圾回收释放的内存量太小:在这种情况下是不够的。

垃圾收集器在它认为合适的时候执行这些完整的 GC,即当应用程序的内存占用接近由 -Xmx 指定的分配最大值时。

如果不是因为这些有问题的内存分配突然出现,并且由于jvm 无法足够快地执行 GC 以释放所需的内存。如果我事先手动调用 System.gc() ,我可以避免这种情况。

无论如何,我宁愿不必自己监视我的 jvm 的内存分配(或将内存管理插入我的应用程序的逻辑);如果有一种方法可以运行具有内存阈值的虚拟机,那将会很好,超过该阈值将自动执行完整的 GC,以便尽早释放我将需要的内存。

长话短说:我需要一种方法(命令行选项?)来配置 jvm,以便在内存占用达到某个阈值时尽早释放大量内存(即执行完整的 GC),我不不在乎这是否会偶尔减慢我的应用程序。

到目前为止,我所发现的都是修改世代大小的方法,但这不是我所需要的(至少不是直接需要的)。

我很感激你的建议,

西尔维奥

附言我正在研究避免大量分配的方法,但这可能需要很长时间,同时我的应用需要一点稳定性

更新:用jvisualvm分析app,发现问题出在老年代

最佳答案

来自 here (这是一个 1.4.2 页面,但相同的选项应该存在于所有 Sun JVM 中):

假设您正在使用 CMS 垃圾收集器(我相信服务器默认打开),您需要的选项是

-XX:CMSInitiatingOccupancyFraction=<percent>

其中 % 是将触发完整 GC 的正在使用的内存百分比。

在此处插入标准免责声明,乱用 GC 参数会给您带来严重的性能问题,因机器而异,等等。

关于java - 当内存占用超过一定阈值时强制进行全面垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2448941/

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