在 Java 中,有没有办法在其下一个 cleanup 循环中标记对象以供 GC 进行垃圾回收?
我听说将对象设置为 null
不再有效。
最佳答案
不,你不能。如果另一个变量引用了它,你会期望发生什么?
请注意,您不能将 object 设置为 null - 您只能将 variable 设置为 null。如果另一个变量仍然具有对该对象的引用,则它仍然不符合垃圾回收条件。
如果您认为需要这样做,这可能意味着您误解了数据 - 或者您的代码中的某处可能存在泄漏(例如,您只添加条目的列表,由静态变量引用- 当类加载器处于 Activity 状态时,这些条目将永远无法进行垃圾回收)。
每个 JVM 都有自己的 GC,但在 Hotspot 中,对象将在下次 GC 运行到该对象当前“存在”的一代时被垃圾收集(假设它没有终结器,这会使事情复杂化)。如果对象处于“年轻”一代,那可能很快就会发生 - 如果它处于“老”一代,则可能需要更长的时间。
您可能想查看 Java 6 GC tuning documentation欲了解更多信息,当然对于 OpenJDK 7 等,事情已经发生了变化。
关于java - GC(垃圾收集器)如何标记一个对象进行垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5331422/