FileInputStream fis = ....
try{
for(int i=0;i<100;i++){
fis = new FileInputStream(...);
}
}finally{
try{
fis.close();
}catch(...){
.....
}
}在这个程序中fis只需要关闭一次对吗?产生的100个流中前99个都被GC回收了,是吧?
解决方案 »
- 怎样从j2se过渡到j2EE
- 关于SSH中的按时间查询
- 菜鸟恳求一实际的ejb例子(不是helloword),希望能通过它懂一些ejb的真正道理!热心人肯定会帮助俺!
- HIBERNATE多张表一对一共用一张表效率问题
- DataHandler传文件报NotSerializableException,求指点
- 学习struts(问题很简单,这分很好得)
- 关于jdbc的问题
- EJB部署成功了,但在测试时初始化Home对像遇到的错误!
- 关于WSDL,AXIS,ETTK和WEBSERVICE的问题
- 各位大侠,有学习structs和Turbine的中文资料或书籍吗?感谢!(内无文)
- 创建SESSION 参数问题
- Servlet执行结束后怎么能不返回页面
try{
fis = new FileInputStream(...);
}catch(Exception e){
}finally{
try{
fis.close();}catch(Exception e){}
}
]
只是最后一次关闭了,前99个在全部在内存 等待回收 ,不是都被回收。楼主还是把 fis.close() 写在 for 循环内比较稳妥!!
import java.io.FileNotFoundException;public class Test {
public static void main(String[] args) throws FileNotFoundException { System.out.println(Integer.MAX_VALUE); long start = System.currentTimeMillis();
FileInputStream fis = null;
try {
for (int i = 0; i < 2147483647; i++) { fis = new FileInputStream(
"E:/Workspaces/MyEclipse 9/TestCsdn/src/com/jungle/CopyOfTest.java"); }
} finally {
try {
if (fis != null)
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println(System.currentTimeMillis() - start); start = System.currentTimeMillis();
for (int i = 0; i < 2147483647; i++) {
try {
fis = new FileInputStream(
"E:/Workspaces/MyEclipse 9/TestCsdn/src/com/jungle/CopyOfTest.java");
} finally {
try {
if (fis != null)
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} System.out.println(System.currentTimeMillis() - start);
}
}
打开任务管理器
我在我的PC机上 运行了十分钟 没有看见内存有变过 都是 占用769MB -- 767MB只见少 不见多神奇吧?!~ 少应该是我关了几个窗口 所以 不要没试验就下结论。
建议用完就关,而且创建一个关一个,楼主应该将关闭动作放在for循环里面。