我通过以下链接变红了:garbage collection from geeksforgeeks 据说:
对于任何给定的对象,finalize()方法永远不会被多次调用。
因此,这里所说的“不止一次”,我想知道是否有可能不调用 finalize() 方法而垃圾收集器会破坏该方法对象。
有可能吗?
答案 0 :(得分:2)
当GC找到一个对象,其中的类中的finalize()
已被覆盖时,会将其添加到对象队列中,以对它们调用finalize()。只有在对象最终完成一次之后,GC才能清理它。即在以后的GC中使用。
例如如果某个对象位于使用权空间中,则可能要等到执行完整收集后才能找到它,并且只有在调用finalize方法之后,才会在完整GC上对其进行清理。
有关更多详细信息,这是Object.finalize()
的Java 11 Javadoc
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#finalize()
那么垃圾回收器是否有可能完全破坏了堆中的对象,但没有对该对象调用finalize()方法?
虽然该对象位于完成队列中,但无法将其删除。
你们都认为垃圾回收器销毁对象没有确定性。
它仍然有很强的参考力,不会被销毁。