Java中的内存不足

Java中的内存不足,java,memory,Java,Memory,好的,我有一个内存泄漏。它很可能位于GUI或ExecutorCompletionService中。监控程序内存的选项是什么 是的,我的内存不足。我在eclipse中的vm参数上设置了-XX:+HeapDumpOnOutOfMemoryError以生成转储文件。情况是有一个ExecutorCompletionService运行计算密集型任务的线程池。线程向gui线程发送中间结果的信号 我正在审查ExecutionController类的单元测试,想知道是否可以将内存监控集成到单元测试中 关于评测选

好的,我有一个内存泄漏。它很可能位于GUI或ExecutorCompletionService中。监控程序内存的选项是什么

是的,我的内存不足。我在eclipse中的vm参数上设置了-XX:+HeapDumpOnOutOfMemoryError以生成转储文件。情况是有一个ExecutorCompletionService运行计算密集型任务的线程池。线程向gui线程发送中间结果的信号

我正在审查ExecutionController类的单元测试,想知道是否可以将内存监控集成到单元测试中

关于评测选项,我上个月成功地完成了这项工作,但我不记得使用了什么程序或专业填充程序。我打开一个单独的窗口,从一个外部运行的监视器监视实时快照。我模模糊糊地记得在确定发生内存泄漏的确切类成员时遇到了一些困难,但提供了足够的信息来解决前面的问题


我将在不久的将来尝试建议的监视选项。

从JDK 6开始,
\bin
目录中包含一个名为
jvisualvm
的分析工具。您可以扫描CPU使用情况、监视内存和线程等


您可以阅读更多信息。

内存泄漏可能是由于JVM的堆栈或堆大小被超过。识别内存泄漏的第一步是确认是否存在内存泄漏。请尝试使用JVM命令行选项增加堆和堆栈空间
-xmx
-xss
分别是增加堆和堆栈大小的选项

一旦确认,有各种各样的工具可以帮助缩小到违规代码块来识别泄漏。我最喜欢的方法是在内存不足异常发生时转储正在运行的线程,假设它发生了,然后检查转储。有关详细信息,请尝试
java-Xrunhprof:help
。我使用内存分析器(MAT),一个eclipse插件来分析转储


此外,还提供了关于如何在线程、堆和堆栈大小方面内省正在运行的JVM的详细信息。如果您使用的是JDK1.6及更高版本,那么它附带了一个分析工具来帮助实现这一目的

您可以将探查器与java process和Monitor连接起来。请提供更多详细信息。您是否从内存中获得了
错误?@PM77-1-大概是的。但实际上并不相关。他不想让我们帮他解决这个问题。他想让我们自己告诉他如何解决这个问题,最后我使用Jconsole来监控内存,在代码中设置了中断来运行部分代码。当记忆在视觉上增加时,点击暂停也很有帮助。罪魁祸首是一系列toString成员,它们导致了一个无限递归循环。我确实增加了最大和最小堆大小,但这没有太大帮助。评估的密集任务更多。我将在不久的将来查看内存转储。我使用的是1.7,因此如果需要的话,我可以查看内存扩展。我最终使用Jconsole来查看内存,代码中设置了中断。当记忆突然增加时,按“暂停”有点帮助。在本例中,原因是由几个toString成员建立的无限递归循环。