Java长时间运行的线程会导致内存泄漏?

时间:2018-12-11 22:59:43

标签: java multithreading

我一直在阅读这篇文章:

由于我自己在线程方面存在问题,所以:

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

1 个答案:

答案 0 :(得分:3)

长时间运行的线程不会造成内存泄漏。这就是您在其中所做的事情。从技术上讲,当垃圾收集器无法收集可用空间时会发生内存泄漏,因为该空间被标记为已使用。即是否保留引用。

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

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

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

重复多次,您会注意到一些应该清除的对象。这会给你一些想法。遵循代码中的这些引用,您可以有所了解。