下面是代码部分:
public static void count() throws IOException {
Properties prop = new Properties();
File file = new File("app.ini");
if (!file.exists())
file.createNewFile();
prop.load(new BufferedReader(new FileReader(file)));
int count = 0;
String appRunCount = prop.getProperty("appruncount");
if (appRunCount != null) {
count = Integer.parseInt(appRunCount);
if (count >= 5) {
System.out.println("试用次数超过限制,请注册后使用");
return;
}
}
count++;
prop.setProperty("appruncount", count + "");
prop.store(new BufferedWriter(new FileWriter(file)), "");
}
请问在我这段代码里,BufferedReader与BufferedWriter流不显示的去关闭会占用内存吗?由于匿名对象使用方便就这么写了,但是我又怕不关闭流占用内存。其实我想问的是程序会自动的帮我关闭这两个流吗?或者说匿名对象用完之后自动释放不会占用内存呢?
方法调用结束后,这两个对象都会被销毁的,它们的内存空间会被回收。
之所以需要关闭流资源,是为了释放资源,因为io是操作系统的动作,例如如果没有关闭,那么这个IO资源就一直被java进程占用,知道java应用结束,这期间操作系统的其他进程就不能访问该IO资源了。
如果你在java代码中访问某个记事本文件,此时你再直接打开该文件,可能就不能打开或者数据不是最新的信息。
对象调用结束,虚拟机会销毁对象,但是不关闭可能会出现问题
这个问题还真没有仔细想过,用的时候很多是直接使用了。
看了一些资料后,我的看法是既然是匿名对象,肯定是要被回收的,但是什么时候回收就不一定了,因此建议你自己处理输入输出流的关闭操作。
可以参见下面的讲解:
中文的:http://www.iteye.com/problems/78952
英文的:https://community.oracle.com/thread/2106780?start=0&tstart=0
感谢楼上的讲解与分享