Java垃圾回收器能够处理多少数据?假设有以下代码:
public class MyClass {
private Object myObject = new Object();
public void clear() {
myObject = null;
}
}
public class MyMain {
...
MyClass myClass = new MyClass();
...
myClass.clear();
myClass = null;
}
我需要在将myClass设置为null之前调用myClass.clear(),以确保GC将删除myClass内的myObject吗?还是仅将myClass设置为null就足够了,GC会删除所有嵌套对象?
也许我有点多虑,答案很简单,即“GC最终将删除任何未被任何正在运行的代码或任何未来可用代码引用的对象”。因此,如果创建的对象在任何运行的代码中都不可用,或永远不会在任何运行的代码中可用,它最终将成为GC的受害者,即使它是嵌套的,这可能会让C++程序员感到恐惧。
myClass = null;
实际上什么也没做。它只是将指针设置为 null,但对象仍然存在。直到 Java GC 检查该对象是否仍在使用(所有运行线程中是否有对它的引用可用?),然后 GC 将删除它。 - Martijn Courteaux