我有一个程序,它处理输入文件,并允许对结果数据集执行操作。由于应用程序的性质,内存占用量非常大 - 几GB。
该程序在90%的时间内都能正常工作,但是某些输入文件会导致在垃圾收集中花费不合理的时间。本质上,程序花费大量时间创建在过程完成之前不会被使用的对象,此时它们被使用。本质上,内存最初会保持增长,然后保持相当稳定。运行应用程序运行时大约3分钟,99.9%的时间花在垃圾收集上,但是几乎没有垃圾收集(我已经检查过内存泄漏)。当使用大约85%的堆空间并且堆停止增长时,似乎会发生这种情况。我不知道堆是否因为没有可用的内存而停止增长,或者因为GC花费了太多时间。我在堆空间上设置了5GB的限制,并在停止之前增长到3.6。
我的问题是这个。鉴于我知道我没有(或内存泄漏很少)并且我知道我的应用程序需要大量内存,我可以关闭,或者至少降低GC的侵略性吗?