【问题标题】:How does Java's garbage collector work? [duplicate]Java 的垃圾收集器是如何工作的? [复制]
【发布时间】:2012-05-13 00:24:17
【问题描述】:

可能重复:
What is the garbage collector in Java?

在我的程序中,我设置了一个函数,它使用ScheduledThreadPoolExecutor 在一定时间后调用另一个函数(在本示例中我们将其设置为 20 分钟)。

被调用的函数,我们会说是removeStat(Character char)。在该方法中,它引用了侧字符中的函数(我们会说char.getClient().getWriter())。我们假设在 20 分钟的等待期间,相关角色退出并且不再需要他们的 Character 实例。

Java 垃圾收集器会在那个时候删除 Character 类,导致 removeStat 中的 char 为空,还是知道等到调用完成?

【问题讨论】:

  • 大声笑不确定这是否是讽刺,但无论哪种方式都欢迎你;)
  • @jmort253 - PuppyKevin 回去接受答案可能意味着它是真诚的。 :)
  • 嗯,伙计们。这不是骗局。至少不是链接的问题。这有一个关于垃圾收集和可调用对象以及调度线程池执行程序的特定问题......链接的问题是关于 GC 的一般问题。
  • @David - 我确定。只是我从他的反应中得到了刺激。如果是讽刺的话,那就太棒了! :)
  • @vidstige - 如果您认为我们犯了错误,您可以尝试编辑问题以使其更清晰,并确保它与other questions about Java Garbage Collection 不同。有时会犯错误,问题在过早关闭或改进后重新打开。如果确实没有重复,您可以标记这个以重新打开。

标签: java garbage-collection


【解决方案1】:

垃圾收集器(包括 Java 的)足够聪明,您不必担心这一点。垃圾收集器不会垃圾收集任何东西,直到所有对它的引用都消失了。如果对象仍可访问,则它仍然存在。

【讨论】:

  • 所以,可以说我不是使用 20 分钟的计时器,而是使用疯狂的时间(我们将使其 7 天) - 我仍然不必担心对象会变为 null ?
  • 没错。如果你仍然可以得到它,它仍然存在。它不关注您访问对象的频率。它会注意是否仍然可以访问它。其他任何事情都有可能破坏某人的代码(比如你的)。
  • 但是您可能不得不担心所有未使用但仍被引用的字符会耗尽内存。
  • @NeilForrester - 这不仅仅是“足够聪明”。 JLS 要求以这种方式行事。任何丢弃具有强可达引用的对象的假设 GC 都违反了规范。
猜你喜欢
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
相关资源
最近更新 更多