大量的长寿命对象与垃圾收集

时间:2018-02-05 09:35:04

标签: java garbage-collection jvm

在我的应用程序中,我有大量长寿命对象。我使用相对较大的堆大小100gb(xmx和xms),一旦我的应用程序命中大约30gb的使用堆,垃圾收集器就会启动一个非常长的停止世界暂停,最多可能需要15分钟。一段时间后,应用程序终止,超出了gc开销限制。

我希望保留整个应用程序生命周期内的所有对象,因此不能释放任何内存。

我知道其中一个解决方案是使用堆外存储,但我现在想避免这种情况。

另一种方法是调整垃圾收集器的参数。我试过不同的算法和年轻一代的尺寸,但它没有帮助,我不知道从那里去。

1 个答案:

答案 0 :(得分:0)

我的问题在于jvm参数的错误顺序。我不知道你必须在-jar switch之前指定所有这些。

我最终正确地设置了更大的堆大小,并且使用了相对较小的年轻代的G1GC(比率为20)。现在,GC暂停更易于管理。

在这个用例中,性能方面可能更好地重写堆外存储的代码。

我删除了我的评论以避免混淆。