java - 方法创建的对象在退出时删除

标签 java memory methods

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

示例:

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/

相关文章:

ios - 当我们开始旋转设备时和完成后将调用什么方法

java - Optional.flatMap() 和 Stream.flatMap() 之间有什么区别

java - 如何使用方法绘制脸部

java - 如何使用httpd用户在redhat 6上运行tomcat?

java - 向 Pentaho Kettle 添加新的数据类型

C#模板参数作为模板接口(interface)

java - 写入文件时出现神秘的 IOException

c - 从文件 (.txt) 中读取并保存到 char* C

c - C 编程中覆盖寄存器 int 失败

c++ - QImage内存不足