这与我的问题Java Excel POI 在石英多次执行后停止有关。
几次迭代后,我的程序意外停止。我尝试进行分析,发现每次迭代都消耗了大量的堆内存(并且某个地方的内存泄漏……还没有找到问题所在)。因此,作为临时解决方案,我尝试System.gc();
在程序的每次完整执行结束时插入(请阅读链接的问题以获取程序的简要说明)。我并没有期待太多,每次迭代后可能会有更多可用的堆空间。但是,当我插入System.gc();
.
上图显示了运行的程序,System.gc();
而下图是没有运行的程序。如您所见,上图显示在程序的 4 次迭代后我只使用了不到 100mb 的空间,而下图显示在相同数量的迭代中使用超过 100mb。任何人都可以澄清如何以及为什么System.gc();
会在我的堆中造成这种影响?如果我在我的程序中使用它有什么缺点吗?或者我对编程完全没有希望,而是开始摄影?
请注意,我在每次程序迭代结束时插入了 GC。所以我假设堆使用必须和没有插入GC的情况一样,直到它满足System.gc();
命令
谢谢!