在特定方法退出时,方法中创建的对象/字段是否会被删除?
示例:
public static void createFolder() {
File folder = new File(C:\example\path "foldername");
folder.mkdir();
}
退出“createFolder”方法时,用于存储文件“文件夹”的内存是否会被删除?
最佳答案
folder
引用的 File
对象在退出该方法时将有资格进行垃圾回收,因为这是对它的唯一引用(folder
)那时就超出了范围。
何时真正进行垃圾收集是不可能准确判断的,但会在那之后的某个时间。
更一般地,方法中的局部变量在堆栈上分配,并在超出范围时被删除。如果它们是原语(int、float、long 等),它们将立即不再存在。如果它们是引用(如您的情况),则引用将立即不再存在,但只要引用存在,所引用的对象就会继续存在。例如,如果您的 createFolder()
方法要返回 folder
的值,并且调用者将该引用保留在其自己的变量之一中,则 File
对象(尚)不符合 GC 条件。当对某个对象的所有引用不再存在时,该对象本身就有资格进行 GC。该语言没有准确指定 GC 发生的时间。
由于一些与“弱”引用有关的深奥主题,这有点复杂,但您可以暂时忽略它们。
关于java - 方法创建的对象在退出时删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18326285/