好的,我有内存泄漏。它最有可能出现在GUI或ExecutorCompletionService中。监控程序存储器有哪些选择?
是的,我出现内存不足错误。我在eclipse中的vm参数上设置了-XX:+ HeapDumpOnOutOfMemoryError来生成转储文件。情况是ExecutorCompletionService运行计算密集型任务的线程池。线程用gui线程发出中间结果信号。
我正在审查ExecutionController类的单元测试,并想知道我是否可以将内存监控集成到单元测试中。
关于分析选项,我上个月成功完成了这项工作,但我不记得使用的程序或专业填充程序。我打开了一个单独的窗口,监控外部运行的监视器的实时快照。我依稀记得在识别具有内存泄漏的精确类成员时遇到的一些困难,但是提供了足够的信息来解决之前的问题。
我会在不久的将来尝试建议的监控选项。
答案 0 :(得分:1)
内存泄漏可能是由于超出了JVM的堆栈或堆大小。识别内存泄漏的第一步是确认是否存在内存泄漏。请尝试使用JVM命令行选项增加堆和堆栈空间。 -xmx
和-xss
分别是增加堆和堆栈大小的选项。
一旦确认,有各种各样的工具可以帮助缩小到违规代码块以识别泄漏。我最喜欢的是在内存不足异常时转储正在运行的线程,假设它已经发生,并检查转储。请尝试java -Xrunhprof:help
了解更多详情。我使用Memory Analyzer(MAT),一个用于分析转储的eclipse插件。
此外,Java Memory Extensions提供了有关如何在线程,堆和堆栈大小方面对运行的JVM进行内省的详细信息。如果您使用的是JDK 1.6及更高版本,它附带visual vm,这是一个用于帮助实现此目的的分析工具。
答案 1 :(得分:0)
从JDK 6开始,名为jvisualvm
的分析工具包含在\bin
目录中。您可以扫描CPU使用情况,监视内存和线程等。
您可以详细了解here。