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