应该花多少时间进行垃圾收集

Dan*_*675 10 java garbage-collection

我有一个应用程序负责存档旧应用程序,这些应用程序一次会执行大量应用程序,因此需要一次运行几天.

当我的公司开发它时,他们对它进行了相当多的性能测试,他们似乎得到了相当不错的数字,但我最近为客户运行了一个存档,它似乎运行得很慢,性能似乎它的运行时间越长越好.

似乎没有内存泄漏,因为我用jconsole监视它仍然有足够的可用内存并且似乎没有缩小.

然而我注意到堆的幸存者空间和终身可以很快填满,直到垃圾收集出现并清除它似乎经常发生,我不确定这是否可能是明显的来源慢一点.

该应用程序已经运行了7天3小时,根据jconsole,它已经花了6个小时执行复制垃圾收集(772,611个收集)和12小时25分钟的标记清理压缩(145,940个收集).

这似乎花了大量的时间用于垃圾收集,我只是想知道是否有人之前已经研究过这样的事情,并且知道这是否正常?

编辑

本地处理似乎很慢,例如我正在查看日志中的一部分花了5秒钟使用xpath从SOAP信封中提取一些xml,然后将其附加到字符串缓冲区以及根标记..这就是全部确实.我还没有对它进行分析,因为这是在生产中运行,我要么必须通过网络提取数据,要么在我们的开发环境中建立一个大型测试基础,这可能最终不得不这样做.

运行Java HotSpot Client VM版本10.0-b23

真的只需要高吞吐量,没有配置任何特定的垃圾收集参数,将运行默认值.不知道如何找到正在使用的收藏家?

固定

最终得到一个分析器继续它,结果导致减速的原因是一些代码不断修剪线条状态框输出记录语句,这是非常糟糕的.应该已经认为垃圾收集是不断将状态文本复制到内存中的症状,而不是实际原因.

干杯伙计.

mer*_*ike 4

根据您的数据,垃圾收集总时间约为 7 天执行时间中的 18 小时。大约占总执行时间的 10%,这略有增加,但即使您设法将其降低到 0%,您也只能节省 10% 的执行时间……因此,如果您正在寻求大幅节省,那么您应该更好地研究其他 90%,例如使用分析器。