【问题标题】:Java Long Running Thread cause memory leak?Java Long Running Thread 导致内存泄漏?
【发布时间】:2018-12-12 10:10:34
【问题描述】:

我一直在阅读这篇文章:

因为我自己有线程问题:

这是否意味着 Java 中长时间运行的线程会造成内存泄漏? 如果我首先需要一个长时间运行的线程怎么办。 大多数应用程序不也是长时间运行的线程吗?

【问题讨论】:

  • 长时间运行的线程本身不一定是问题。如果您将它与第一个链接中的其他点结合起来,那就是一个问题。

标签: java multithreading


【解决方案1】:

长时间运行的线程不会造成内存泄漏。这就是你在里面做的事情。从技术上讲,当垃圾收集器无法收集可用空间时,就会发生内存泄漏,因为该空间被标记为正在使用。即如果引用被持有。

现在在一个长时间运行的线程中,您可以在线程的整个生命周期内都存在一个对象引用。这个对象本身可能很昂贵。在你共享的first link 中就是这种情况(threadlocal 传递地持有所有引用)

在您的second link 上,问题似乎出在某个地方。如果我怀疑内存泄漏,我通常会这样做

  1. 使用 jmap 获取每个类实例的计数
  2. 强制完全 GC
  3. 再次统计每个类的实例,这些是 GC 无法清理的对象

重复多次,你会注意到一些应该被清除的对象。这会给你一些想法。按照代码中的这些引用,您可以得到一些想法。

【讨论】:

猜你喜欢
  • 2014-02-19
  • 2015-07-06
  • 2014-06-07
  • 2013-11-20
  • 2011-10-28
  • 2016-01-18
  • 2012-12-13
  • 1970-01-01
  • 2011-01-08
相关资源
最近更新 更多