【发布时间】:2015-03-19 03:30:21
【问题描述】:
我有一个名为 abc.txt 的文件。
-
我通过以下方式与它建立了联系:
FileInputStream fs = new FileInputStream("abc.txt");
这位于方法级别。
如果我不关闭连接,对象是否有资格进行垃圾回收?
资源会被关闭吗?
程序示例:
class Hello {
public void readFile(){
FileInputStream fs = new FileInputStream("abc.txt");
/*
here i wont close the connection
*/
}
}
class Demo {
public static void main(String args[]) {
Hello h = Hello();
h.readFile();
/*
Some other operation
*/
}
}
场景 2:在 main 方法中我取消引用 h。
class Demo {
public static void main(String args[]) {
Hello h = Hello();
h.readFile();
h = null;//Dereference
}
}
现在这个 h 对象可以进行垃圾回收了吗? (注意:资源连接没有关闭)
【问题讨论】:
-
一般经验法则,如果您打开,则必须关闭它。没有办法 100% 确定资源是否会被关闭,因为资源可能包含对其他不符合垃圾回收条件的对象的引用。
标签: java memory-management memory-leaks resources garbage-collection