【发布时间】:2011-10-08 13:43:31
【问题描述】:
我的应用程序目前消耗了大量内存,因为它正在运行物理模拟。问题是,在第 51 次模拟时,Java 通常会因为堆空间内存不足而抛出错误(我的程序最终会运行数千次模拟)。
有没有我不仅可以增加堆空间,还可以修改我的程序,以便在每次运行后清除堆空间,以便我可以运行任意数量的模拟?
编辑:谢谢大家。事实证明,模拟器软件在每次运行后都没有清除信息,而我将这些运行都存储在 ArrayList 中。
【问题讨论】:
-
听起来像是内存泄漏
-
如果随着您运行越来越多的模拟,您的内存占用量越来越大,那么您就有了内存泄漏。你需要弄清楚为什么你的记忆在模拟结束时没有被回收。
-
是的,可能是内存泄漏,我不记得名字了,但它是一个 IBM 应用程序,它可以让您直观地看到每个线程和堆栈。几年前,这个工具帮助我们找到了 hibernate 的内存泄漏问题。将尝试用该名称更新您。
-
@randomafk:模拟是否相互依赖?你的程序是正确的多线程的吗?如果是 "no" 和 "no",那么“修复”问题的一种非常简单的方法是从 shell 脚本执行模拟。即使您的 Java 应用程序是单线程的,您也只能收集结果,甚至可以在 x 个内核上运行模拟。除此之外,显而易见的解决方案不是“清除”堆空间,而是 a) 停止泄漏内存并且 b) 使用更少内存消耗的方法(例如通过使用比默认 Java 更好的库,例如 Trove)。
标签: java memory physics heap-memory