【问题标题】:In Java, how is an Array of objects garbage collected?在 Java 中,如何对对象数组进行垃圾收集?
【发布时间】:2012-03-26 12:52:51
【问题描述】:

当一个对象数组不再被引用时,该数组中的对象是否也会被垃圾回收? (假设没有变量引用元素)

在此页面中,http://java.sys-con.com/node/37613 它说 - “最大的危险是把一个对象放到一个集合中而忘记删除它。那个对象使用的内存永远不会被回收。”

如果您确保取消引用,为什么该内存会无人认领?

谢谢

【问题讨论】:

  • 因为如果你不取消引用,它不会被回收。

标签: java arrays object garbage-collection


【解决方案1】:

当一个对象数组不再被引用时,对象是否 在那个数组中也收集垃圾吗? (假设没有变量 引用元素)

是的。

“最大的危险是把一个对象放入一个集合中,然后 忘记删除它。该对象使用的内存永远不会 回收。”

这是您正在持有对集合的引用的时候。例如,如果您有一个 Map,您在其中放置了一个键值,然后忘记删除,那么它会永远保留在那里。想想 http 会话,如果您在 ServerContext 中使用某些东西,或者在请求开始时使用会话 ID 作为键但未能在请求处理结束时将其删除。

【讨论】:

    【解决方案2】:

    对于第一个问题,答案是肯定的:非引用数组中的对象和其他引用都不会被垃圾回收。

    关于第二个问题,文档谈到了将遗忘对象放在引用集合中,例如某种缓存、静态字段、线程本地存储等。

    【讨论】:

      【解决方案3】:

      如果没有引用它,它不会被无人认领。文章说,如果你使引用无效,但对象仍在被引用的集合中(因此被引用),则不会被收集。

      【讨论】:

        【解决方案4】:

        一般来说,任何未引用的内容都会被垃圾回收。所以,是的,这些对象会被垃圾回收。

        另外,请注意:

        1. 数组不是集合。
        2. 我认为写这句话的人的意思是确保你 记住你引用一个对象的所有地方,这样如果 您打算删除它,它会被删除(并且没有挥之不去的 引用)。

        【讨论】:

          猜你喜欢
          • 2012-10-04
          • 2011-07-16
          • 2012-07-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多