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

时间:2020-03-06 14:29:00  来源:igfitidea点击:

我正在处理一个大型应用程序(300K LOC),这会导致Sun 1.6 JVM(1.6_05)中发生内存泄漏。对Java进行性能分析不会显示泄漏。 JVM是否有可用的诊断程序可以检测到泄漏的原因?
我还无法创建一个简单的隔离Java测试用例。通过在JVM上使用C堆分析器解决此问题的唯一方法是吗?
该应用程序创建一个套接字池,并执行大量的网络I / O。

解决方案

诸如profiler4j之类的某些探查器可以显示托管和非托管内存(实时曲线)。然后,我们可以查看是否有泄漏以及泄漏发生的时间。但是我们找不到更多信息。

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

  • 我们可以使用实时曲线来隔离问题并创建更简单的测试,直到找到问题的原因。
  • 永不丢弃的图像或者图形
  • 永远不会关闭的ODBC桥对象

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