如何诊断由Java程序引起的C内存泄漏?

Dav*_*d G 6 java memory-leaks

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

Hor*_*ux7 2

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

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

  1. 您可以使用实时曲线隔离问题并创建更简单的测试,直到找到问题的原因。
  2. 您在代码中搜索典型问题,例如:
    1. 永远不会启动的 Thread 类的实例。
    2. 永远不会被处理的图像或图形
    3. 永远不会关闭的 ODBC 桥对象