如何诊断Java程序导致的C内存泄漏?

如何诊断Java程序导致的C内存泄漏?,java,memory-leaks,Java,Memory Leaks,我正在开发一个大型应用程序(300K LOC),它导致Sun 1.6 JVM(1.6_05)中出现内存泄漏。对Java进行评测不会显示泄漏。JVM是否提供了任何可能检测泄漏原因的诊断? 我还不能创建一个简单的、孤立的Java测试用例。在JVM上使用C堆分析器是解决这个问题的唯一方法吗? 应用程序创建一个套接字池并执行大量网络I/O。一些探查器(如profiler4j)可以显示托管和非托管内存(活动曲线)。然后,您可以查看是否存在泄漏以及泄漏发生的时间。但是你没有找到更多的信息 在此之后,有两种可

我正在开发一个大型应用程序(300K LOC),它导致Sun 1.6 JVM(1.6_05)中出现内存泄漏。对Java进行评测不会显示泄漏。JVM是否提供了任何可能检测泄漏原因的诊断?
我还不能创建一个简单的、孤立的Java测试用例。在JVM上使用C堆分析器是解决这个问题的唯一方法吗?

应用程序创建一个套接字池并执行大量网络I/O。

一些探查器(如profiler4j)可以显示托管和非托管内存(活动曲线)。然后,您可以查看是否存在泄漏以及泄漏发生的时间。但是你没有找到更多的信息

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

  • 可以使用活动曲线隔离问题并创建更简单的测试,直到找到问题的原因
  • 您可以在代码中搜索典型问题,如:
  • 从未启动的类线程实例
  • 永远不会处理的图像或图形
  • 从不关闭的ODBC网桥对象
  • 我喜欢valgrind(),如果您在它支持的系统上执行它的话。真是太棒了