java - 在销毁 'finalize()' 对象之前,垃圾收集器是否总是调用 'Unreachable' 方法?

标签 java garbage-collection jvm finalize

我从以下链接中获得红色:garbage collection from geeksforgeeks 这里据说:

The finalize() method is never invoked more than once for any given object.

所以,这里说“不止一次”,我想知道是否有可能 finalize() 方法未被调用并且垃圾收集器销毁了该方法对象。

可能吗?

最佳答案

当 GC 发现一个对象的类 finalize() 已被重写时,它会被添加到对象队列中,以便对其调用 Finalize()。只有在对象被终结一次之后,GC 才能将其清理。即这将在稍后的 GC 上进行。

例如如果一个对象位于tenured空间中,则可能会在执行完全收集之前找到它,并且只有在调用finalize方法后才会在完全GC上清理它。

有关更多详细信息,请参阅 Object.finalize() 的 Java 11 Javadoc

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#finalize()

so is there any possibility that garbage collector fully destroyed the object in heap but didn't call the finalize() method on that object?

当对象位于终结队列中时,无法将其删除。

And you all assumed that there is not certainity in the destroying of object by the garbage collector.

只要仍然存在对它的强引用,它就不会被销毁。

关于java - 在销毁 'finalize()' 对象之前,垃圾收集器是否总是调用 'Unreachable' 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52629274/

相关文章:

iphone - Objective-C:在释放父对象之前是否必须释放属性对象?

java - 限制 JVM 打开的文件句柄数以读取依赖 JAR

java - 使用mvn assembly :single to build a jar-with-dependencies?时如何包含本地jar

java - 用小程序加载 .DLL 并在客户端上使用

Java 8 流 - 如何过滤列表并获取值

Java JAX-RS REST 服务客户端代码生成

java - GC 是否将内存释放回操作系统?

java - 使 JSpinner 在获得焦点时选择文本

object - 为什么 JVM GC 喜欢不可变对象(immutable对象)?

performance - ParallelGCFailedAllocation 的大 'sync' 值