0

好的,我有内存泄漏。它最有可能在 GUI 或 ExecutorCompletionService 中。监控程序内存的选项有哪些?

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

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

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

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

4

2 回答 2

1

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

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

此外,Java 内存扩展提供了有关如何自省正在运行的 JVM 关于线程、堆和堆栈大小的详细信息。如果您使用的是 JDK 1.6 及更高版本,它附带了 visual vm,这是一个有助于实现此目的的分析工具。

于 2013-04-08T02:00:49.140 回答
0

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

你可以在这里阅读更多关于它的信息。

于 2013-04-08T01:56:02.883 回答