我正在开发一个导致 Sun 1.6 JVM (1.6_05) 内存泄漏的大型应用程序 (300K LOC)。分析 Java 显示没有泄漏。JVM 是否有任何可用的诊断程序可以检测到泄漏的原因?
我无法创建一个简单的、独立的 Java 测试用例。是通过在 JVM 上使用 C 堆分析器来解决这个问题的唯一方法吗?
该应用程序创建一个套接字池并执行大量网络 I/O。
David G
问问题
397 次
2 回答
2
像 profiler4j 这样的分析器可以显示托管和非托管内存(实时曲线)。然后您可以查看是否有泄漏以及何时发生泄漏。但是您没有找到更多信息。
在此之后有两种可能的解决方案:
- 您可以使用实时曲线隔离问题并创建更简单的测试,直到找到问题的原因。
- 您在代码中搜索典型问题,例如:
- 从未启动的 Thread 类的实例。
- 永远不会被丢弃的图像或图形
- 永远不会关闭的 ODBC 桥对象
于 2008-09-20T13:06:56.997 回答
0
我喜欢 valgrind ( http://valgrind.org/ ),如果你在它支持的系统上执行它。它真的很摇滚!
于 2008-09-20T13:08:12.470 回答