我读到过这样的内容,即对象在以下情况下变得适合进行垃圾回收:
- 该对象的所有引用都显式设置为null。
- 对象在块中创建,一旦控制退出该块,引用就会超出范围。
- 父对象设置为null,如果一个对象持有另一个对象的引用,并且当您将容器对象的引用设置为null时,子对象或包含的对象自动变为适合进行垃圾回收。
但是,有没有办法确定适合进行垃圾回收的对象是否被垃圾回收器收集了?
我读到过这样的内容,即对象在以下情况下变得适合进行垃圾回收:
但是,有没有办法确定适合进行垃圾回收的对象是否被垃圾回收器收集了?
Object#finalize()
方法。public class Driver {
public static void main(String[] args) throws Exception {
garbage();
System.gc();
Thread.sleep(1000);
}
public static void garbage() {
Driver collectMe = new Driver();
}
@Override
protected void finalize() {
System.out.println(Thread.currentThread().getName() + ": See ya, nerds!");
}
}
打印的功能
Finalizer: See ya, nerds!
在对象被垃圾回收后,JVM会调用它的finalize方法。默认实现不做任何事情;您可以覆盖它以打印告别消息或关闭某些已打开的资源。
但请注意,不能保证在收集后多久调用它。
finalize()
方法会在对象被认为可回收时调用,而不是在对象被回收后调用。 - Sotirios Delimanolis
finalize
方法。然而,我必须告诉你:我写了成千上万行Java代码,从来没有遇到过需要使用finalize
的情况。在与其他程序员交流时,它从未被提及。除了满足你对它的好奇心之外,我强烈建议不要使用这个方法。我真的不知道为什么他们不废弃它... - Radu Murzea