6

我正在开发一个导致 Sun 1.6 JVM (1.6_05) 内存泄漏的大型应用程序 (300K LOC)。分析 Java 显示没有泄漏。JVM 是否有任何可用的诊断程序可以检测到泄漏的原因?
我无法创建一个简单的、独立的 Java 测试用例。是通过在 JVM 上使用 C 堆分析器来解决这个问题的唯一方法吗?
该应用程序创建一个套接字池并执行大量网络 I/O。

4

2 回答 2

2

像 profiler4j 这样的分析器可以显示托管和非托管内存(实时曲线)。然后您可以查看是否有泄漏以及何时发生泄漏。但是您没有找到更多信息。

在此之后有两种可能的解决方案:

  1. 您可以使用实时曲线隔离问题并创建更简单的测试,直到找到问题的原因。
  2. 您在代码中搜索典型问题,例如:
    1. 从未启动的 Thread 类的实例。
    2. 永远不会被丢弃的图像或图形
    3. 永远不会关闭的 ODBC 桥对象
于 2008-09-20T13:06:56.997 回答
0

我喜欢 valgrind ( http://valgrind.org/ ),如果你在它支持的系统上执行它。它真的很摇滚!

于 2008-09-20T13:08:12.470 回答