在我的应用程序中,我有大量长寿命对象。我使用相对较大的堆大小100gb(xmx和xms),一旦我的应用程序命中大约30gb的使用堆,垃圾收集器就会启动一个非常长的停止世界暂停,最多可能需要15分钟。一段时间后,应用程序终止,超出了gc开销限制。
我希望保留整个应用程序生命周期内的所有对象,因此不能释放任何内存。
我知道其中一个解决方案是使用堆外存储,但我现在想避免这种情况。
另一种方法是调整垃圾收集器的参数。我试过不同的算法和年轻一代的尺寸,但它没有帮助,我不知道从那里去。
答案 0 :(得分:0)
我的问题在于jvm参数的错误顺序。我不知道你必须在-jar switch之前指定所有这些。
我最终正确地设置了更大的堆大小,并且使用了相对较小的年轻代的G1GC(比率为20)。现在,GC暂停更易于管理。
在这个用例中,性能方面可能更好地重写堆外存储的代码。
我删除了我的评论以避免混淆。