【问题标题】:In Java, how is an Array of objects garbage collected?在 Java 中,如何对对象数组进行垃圾收集?
【发布时间】:2012-03-26 12:52:51
【问题描述】:
【问题讨论】:
标签:
java
arrays
object
garbage-collection
【解决方案1】:
当一个对象数组不再被引用时,对象是否
在那个数组中也收集垃圾吗? (假设没有变量
引用元素)
是的。
“最大的危险是把一个对象放入一个集合中,然后
忘记删除它。该对象使用的内存永远不会
回收。”
这是您正在持有对集合的引用的时候。例如,如果您有一个 Map,您在其中放置了一个键值,然后忘记删除,那么它会永远保留在那里。想想 http 会话,如果您在 ServerContext 中使用某些东西,或者在请求开始时使用会话 ID 作为键但未能在请求处理结束时将其删除。
【解决方案2】:
对于第一个问题,答案是肯定的:非引用数组中的对象和其他引用都不会被垃圾回收。
关于第二个问题,文档谈到了将遗忘对象放在引用集合中,例如某种缓存、静态字段、线程本地存储等。
【解决方案3】:
如果没有引用它,它不会被无人认领。文章说,如果你使引用无效,但对象仍在被引用的集合中(因此被引用),则不会被收集。
【解决方案4】:
一般来说,任何未引用的内容都会被垃圾回收。所以,是的,这些对象会被垃圾回收。
另外,请注意:
- 数组不是集合。
- 我认为写这句话的人的意思是确保你
记住你引用一个对象的所有地方,这样如果
您打算删除它,它会被删除(并且没有挥之不去的
引用)。