如何在JVM中定义内存泄漏?

时间:2015-05-25 19:41:26

标签: java memory-management memory-leaks jvm profiler

当我收到OOM错误时,如何确定天气我应该增加堆大小或我的代码存在内存泄漏问题?

另外,我如何决定应用程序的初始堆大小?在我目前的应用程序中,我们已经开始使用512MB但现在增加到4GB。但这是通过反复试验方法完成的。有没有系统的方法来决定所需的堆大小?

如果我的问题听起来太基础了,有人可以分享一些有助于增加对此的理解的参考文献吗?

2 个答案:

答案 0 :(得分:2)

我不认为Java或JVM实际上定义了"泄漏"。但是你的程序显然受到它们的影响。我确定他们定义了#34;内存不足"。

如果存在一个永远不会被应用程序再次检查的对象,由永远不会退出的作用域中的引用持有,或者偶尔检查的另一个对象持有,则会发生内存泄漏。这种泄漏可能不会严重影响程序的长期稳定性。

如果在运行应用程序中的某些代码时生成具有这些属性的新对象,并且该位代码可能无限次运行,则会出现严重泄漏。最终,泄漏严重的程序会耗尽内存。

答案 1 :(得分:2)

在我看来,'泄漏'在GC环境中是一个不好的术语。泄漏正是进行垃圾收集。

什么不是GC,以及OutOfMemoryErrors,是什么原因导致泄漏的内存,即对超出其真实使用寿命的对象的引用,通常是一个引用,它是一个应该是方法本地的成员变量。