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

时间:2008-09-20 12:48:47

标签: java memory-leaks

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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