如何解决Java中的内存泄漏问题

时间:2012-07-23 10:51:07

标签: java

我正在构建一个大型导入脚本,它使用来自单独代码库的功能,我怀疑它有内存泄漏。它为相同的操作调用代码库多达10000次,而第一个相对较快(2秒),脚本需要很长时间才能运行(超过100小时并且计数),并且最后相同的任务结束到60秒或更长时间(并且还在攀爬)。找到并修复泄漏的最佳方法是什么?

一些头脑风暴的解决方案是:

创建一个运行部分脚本然后结束它的进程,回收它使用的资源。

使用shell脚本多次启动程序,每次完成任务的子集,并将更新的数据输出到文件以供下一次迭代使用

编辑:更改问题的措辞方式,以明确导入和代码库是单独的程序

2 个答案:

答案 0 :(得分:2)

您知道,您提供的证据都没有明确指出存储泄漏。真正的问题可能是完全不同的,例如设计不佳的算法,或者调整得不好的数据库表或查询。

假设这是一个存储泄漏并且应用“创可贴”解决方案可能是浪费时间,或者实际上使问题变得更糟。

你最好花时间预先确定真正的问题并解决它,而不是尝试一系列的解决方法......这可能会变得徒劳无功。

答案 1 :(得分:0)

我通过最小化包含对其他代码库的引用的范围来解决了这个问题。基本上每次我初始化一个对象或从另一个代码库中调用一个函数时,我都会通过箍来确保它在尽可能短的时间内存在。通常将引用再次设置为NULL,以确保删除所有引用。

最终表现出色,将时间从150多个小时缩短到30岁以下。