0

退出该特定方法时是否会删除在该方法中创建的对象/字段?

例子:

public static void createFolder() {

    File folder = new File(C:\example\path "foldername");
    folder.mkdir();
}

退出“createFolder”方法时是否会删除用于存储文件“文件夹”的内存?

4

1 回答 1

3

File引用的对象folder在退出该方法时就可以进行垃圾回收,因为此时对它的唯一引用 ( folder) 超出了范围。

何时真正进行垃圾收集是不可能的,但它会在那之后的某个时间。

更一般地,方法中的局部变量在堆栈上分配,并在超出范围时被删除。如果它们是原语(int、float、long 等),它们将立即停止存在。如果它们是引用(如您的情况),则引用将立即停止存在,但只要引用存在,所引用的对象就会继续存在。例如,如果您的createFolder()方法要返回 的值folder,并且调用者将该引用保留在其自己的变量之一中,则该File对象将(尚)不符合 GC 条件。当对一个对象的所有引用不再存在时,该对象本身就有资格进行 GC。该语言没有准确指定 GC 发生的时间。

由于一些与“弱”引用有关的深奥主题,这有点复杂,但你可以暂时忽略这些。

于 2013-08-20T03:01:07.110 回答