FileInputStream fis = ....
try{
for(int i=0;i<100;i++){
fis = new FileInputStream(...);
}
}finally{
try{
fis.close();
}catch(...){
.....
}
}在这个程序中fis只需要关闭一次对吗?产生的100个流中前99个都被GC回收了,是吧?
解决方案 »
- 怎样实现将含有文字和图片的表单,将图片保持的服务器,图片地址,图片名称保存到数据库中
- struts2的action问题
- 菜单的汉化啊~!~!~!~!~愁
- MVC的各个部分都有那些技术来实现?如何实现?
- Struts<logic:iterate>问题?
- 请教:TCP服务端,是为每个请求开一个线程还是其他的处理方式?
- 急!!JspsmartUpload上传文件出现的问题
- jfreereport里的图表怎么在WEB上显示出来
- SERVLET生成的网页中怎样加一些图片
- myeclipse开发消息驱动Bean,如何关联jms类的源码?
- 创建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循环里面。