黑马程序员技术交流社区

标题: 流有必要要关闭啊? [打印本页]

作者: 文江江    时间: 2014-3-9 12:52
标题: 流有必要要关闭啊?
本帖最后由 文江江 于 2014-3-9 17:03 编辑

一个对象在没有引用变量指向它时会变为垃圾,最终垃圾回收机制会从内存中清除,创建了流对象,为什么还要调用close方法关闭流资源呢?
作者: .......    时间: 2014-3-9 13:07
这跟资源的占用有关
比如你将一个100MB的word文档转换成流,然后进行分析存储到数据库一样
它是将这100MB的东西读到内存,然后进行处理,如果你在使用的时候不关闭
那么java就认为你是一直在使用
而不进行垃圾回收
那么就占你100MB的内存
这样有可能导致内存溢出
作者: 欧阳疯    时间: 2014-3-9 13:50
垃圾回收器只能处理java虚拟机所产生的内存垃圾 而流所消耗的操作系统资源、硬件、网络资源等的外部资源 这不是java虚拟机能管的 当然也不是垃圾回收器能处理的
垃圾回收只是针对内存空间的,其它资源不会被回收,而且回收的时机一般也是不可预知的,在不需要了以后及时释放占用的文件句柄 数据库连接等非内存资源可以提高资源利用效率,避免问题
像输入输出流I/O用完后就得关闭,如果不关闭意味着还将继续使用,系统会等待相关的输入数据或输出数据,占用资源,垃圾回收器并不会回收,垃圾回收器是用来收集程序中失去引用的对象,对象失去引用,程序无法找到其所在内存的地址,java垃圾回收器就会将其回收。
作者: 黑马晓志    时间: 2014-3-9 15:08
垃圾回收器处理的只是流对象,但是还有一些系统资源需要用close()方法关闭
作者: hdsjsql    时间: 2014-3-9 20:25
流对象要调用底层系统资源,垃圾回收机制只能回收java对象,而不能回收底层系统资源,所有要用close关闭资源




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2