【问题标题】:How is memory leak defined in JVM?JVM中如何定义内存泄漏?
【发布时间】:2015-08-07 07:52:44
【问题描述】:

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

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

如果我的问题听起来太基础,谁能分享一些可以帮助加深理解的参考资料?

【问题讨论】:

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


【解决方案1】:

在我看来,“泄漏”在 GC 上下文中是一个糟糕的术语。泄漏正是进行垃圾收集的内容。

什么不会被 GC,以及导致 OutOfMemoryErrors, 的原因是内存在应该泄露的时候没有泄露,即对超出其真正有用生命周期的对象的引用,通常是引用是一个成员变量,应该是方法局部的。

【讨论】:

    【解决方案2】:

    我认为 Java 或 JVM 并没有真正定义“泄漏”。但是您的程序显然会受到它们的影响。我确定他们定义了“内存不足”。

    如果有一个对象永远不会被应用程序再次检查,被一个永远不会退出的范围内的引用持有,或者被另一个偶尔检查的对象持有,那么您就有内存泄漏。这种泄漏可能不会严重影响程序的长期稳定性。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 2018-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多