Java 的 finalize
在 JVM 确定对象符合垃圾回收条件后调用该方法。对于何时发生这种情况,或者在程序退出之前是否会发生,没有真正的保证。我的问题是 finalize
是否保证为实际上被垃圾收集的对象调用。我特别考虑的是分代 GC 中最年轻一代中的对象。
在分代 GC 中,最年轻的一代通常会使用简单的标记-清除集合进行 GC,其中仅遍历 Activity 对象并将其复制到新空间。因此,最年轻一代中的垃圾实际上并没有被遍历。而如果垃圾没有被遍历,那么我们如何保证对于变成垃圾的对象调用finalize
呢?看起来要么a)不能保证这些在最年轻的一代中成为垃圾的对象会调用finalize
,要么b)保证finalize
将被调用被调用,但覆盖 finalize
的对象以某种方式以不同的方式处理。
最佳答案
这篇文章向您展示了可终结对象的一种实现是如何工作的 http://www.fasterj.com/articles/finalizer1.shtml
关于java - 终结器如何与分代 GC 交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19275387/