java - GC(垃圾收集器)如何标记一个对象进行垃圾收集?

标签 java memory garbage-collection

在 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/

相关文章:

.net - 当 CLR 在 .net 中调用垃圾收集器时?

java - 为什么调用 DetachCurrentThread() 会导致过多的垃圾回收?

logging - 如何为 Apache Kafka 代理启用 GC 日志记录,同时防止日志文件覆盖并限制磁盘空间使用

java - 在 Java 中运行两次 GUI 应用程序

Java-多线程以提高将数据插入数据库的性能

java - 使用数组实现链表

debugging - 如何分析windbg中的<unclassified>内存使用情况

java - 如何在调用者的某些条件下更新 Thread 类中变量的值

linux - free如何计算已用内存?

memory - 使用BIOS int 0x15/E820查看内存映射