A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 文江江 中级黑马   /  2014-3-9 12:52  /  862 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 文江江 于 2014-3-9 17:03 编辑

一个对象在没有引用变量指向它时会变为垃圾,最终垃圾回收机制会从内存中清除,创建了流对象,为什么还要调用close方法关闭流资源呢?

4 个回复

倒序浏览
这跟资源的占用有关
比如你将一个100MB的word文档转换成流,然后进行分析存储到数据库一样
它是将这100MB的东西读到内存,然后进行处理,如果你在使用的时候不关闭
那么java就认为你是一直在使用
而不进行垃圾回收
那么就占你100MB的内存
这样有可能导致内存溢出
回复 使用道具 举报
垃圾回收器只能处理java虚拟机所产生的内存垃圾 而流所消耗的操作系统资源、硬件、网络资源等的外部资源 这不是java虚拟机能管的 当然也不是垃圾回收器能处理的
垃圾回收只是针对内存空间的,其它资源不会被回收,而且回收的时机一般也是不可预知的,在不需要了以后及时释放占用的文件句柄 数据库连接等非内存资源可以提高资源利用效率,避免问题
像输入输出流I/O用完后就得关闭,如果不关闭意味着还将继续使用,系统会等待相关的输入数据或输出数据,占用资源,垃圾回收器并不会回收,垃圾回收器是用来收集程序中失去引用的对象,对象失去引用,程序无法找到其所在内存的地址,java垃圾回收器就会将其回收。
回复 使用道具 举报
垃圾回收器处理的只是流对象,但是还有一些系统资源需要用close()方法关闭
回复 使用道具 举报
流对象要调用底层系统资源,垃圾回收机制只能回收java对象,而不能回收底层系统资源,所有要用close关闭资源
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马