如果GC后JConsole中显示的"Heap"内存使用率通常returns为0,是否没有内存泄漏?

If "Heap" memory usage shown in JConsole usually returns to 0 after GC, is there no memory leak?

我一直在尝试使用 JConsole 来确定我是否有内存泄漏。

我让我的代码 运行 很长时间,并确保它执行所有可用函数的多次迭代,多次启动/停止所有线程,多次实例化和释放每个对象,遇到尽可能多的意外条件/错误尽可能。

毕竟,如果我在 Jconsole 中按 "Perform GC" 几次,绿色 "Heap" 内存图 returns 变为 0-- 这是否意味着,假设所有代码都已执行了几次,我(可能)没有内存泄漏?

或者内存是否可以在堆以外的地方泄漏?

我看到了一些可能性:

  • 未关闭连接
  • 带键的地图,实现了错误的hashCode/equals方法
  • 在 WebApps 中:数据保存在会话中
  • clean-up-code 没有 运行 因为异常 --> 大多数时候,这种泄漏发生在生产中,因为它们需要时间 "to build up",或者特殊情况:数据库不可用,....

你的测试是一个好兆头,但没有保证。