相关疑难解决方法(0)

当内存占用超过某个阈值时强制完全垃圾收集

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

这不是内存泄漏,因为垃圾收集器可以通过执行完整的垃圾收集来声明这些块.正常的垃圾收集释放了太小的内存量:在这种情况下它是不够的.

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

如果不是因为这些有问题的内存分配突然爆发,并且由于jvm无法足够快地执行GC以释放所需内存这一事实而导致OutOfMemoryErrors,那就没关系.如果我事先手动调用System.gc(),我可以防止这种情况.

无论如何,我不想自己监视我的jvm的内存分配(或者将内存管理插入到我的应用程序的逻辑中); 如果有一种方法可以运行具有内存阈值的虚拟机,那么将会自动执行完整的GC,以便尽快释放我将需要的内存.

长话短说:我需要一种方法(一个命令行选项?)配置jvm以便在内存占用达到一定阈值时提前释放大量内存(即执行完整的GC),我不在乎是否每隔一段时间,这会减慢我的应用程序.

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

我很感激你的建议,

西尔维奥

PS我正在努力避免大量分配,但它可能需要很长时间,同时我的应用程序需要一点稳定性

更新:用jvisualvm分析应用程序,我可以看到问题出在老一代

java garbage-collection jvm memory-management out-of-memory

10
推荐指数
1
解决办法
1万
查看次数