我一直在尝试使用 JConsole 来确定是否存在内存泄漏。
我让我的代码运行很长时间,并确保它对所有可用函数执行多次迭代,多次启动/停止所有线程,多次实例化和释放每个对象,遇到尽可能多的意外情况/错误。
毕竟,如果我在 Jconsole 中按几次“执行 GC”,并且绿色“堆”内存图返回到 0,这是否意味着,假设所有代码已执行多次,我(可能)没有内存泄漏?
或者内存会在堆以外的其他地方泄漏吗?
最佳答案
我看到了一些可能性:
- 未关闭连接
- 带有键的映射,其 hashCode/equals 方法实现错误
- 在 WebApp 中:数据保存在 session 中
- 清理代码因异常而未运行 --> 大多数时候,这种泄漏发生在生产中,因为它们需要时间“建立”,或者特殊情况:不可用的数据库,....
您的测试是一个好兆头,但不能保证。
关于java - 如果GC后JConsole显示的 "Heap"内存使用量通常返回0,是否没有内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28722734/