由IO流关闭引发的关于垃圾回收机制及finalize()的理解
2017-10-31 16:44
204 查看
前段时间行方服务器由于IO流未正确关闭而多次宕机,为此特意开会强调了IO流关闭的问题,现将比较标准的IO流关闭代码整理出来:
以上就是单一流关闭大致步骤,关于IO流,其实还有几点:1. 习惯上,先开的流后关闭;2. 如存在装饰流,只关闭装饰流即可,内层被装饰的流会自动关闭;3. 一个finally里中关闭多个流,需要分别try-catch,防止异常影响后续代码不执行。
可能有朋友会对【注1】的
有疑问,这就引出了java的垃圾回收机制。
java垃圾回收的大原则是:JVM会在存储空间即将耗尽前,清理不再使用的对象,以释放空间。
此处,如果os关闭出现异常,则将os的引用置空,那么堆中流对象将被闲置,如果出现存储空间即将耗尽的情况,那么该对象将会被回收以释放空间,这就是此行代码的解释。
提到垃圾回收,我一下就联想到finalize()方法(或许是学习时区分final,finally,finalize()三者区别的面试题印象比较深)。在阅读5.5节之前,对finalize()理解停留在:Object类的方法,用于垃圾回收,没了。读后,对这部分加深了理解。
关于finalize(), 大原则是:能不用就不用,用也不用于清理操作。书中例子很有启发性:作为“终结条件”的验证。所谓终结条件,即对象将被清理时,应当处于某种状态,在执行finalize()时,校验这种状态,如果这个状态不满足预期,那么可能就是程序有缺陷。这个思路确实很巧妙,finalize()可能用的不多,但是这种思想如果外延到普通的程序状态验证,某种程度上确实会帮助我们定位问题。
同样的,这部分学习的还不够深入,后续再做补充。
OutputStream os = null; try { //假设从已有响应对象response中获取了输出流对象 os = response.getOutputStream(); System.out.println("执行一些输出流操作"); }catch(Exception e) { System.out.println("捕获异常"); }finally { if(os != null) { try { os.close(); }catch(Exception e) { os = null; //[1] } } }
以上就是单一流关闭大致步骤,关于IO流,其实还有几点:1. 习惯上,先开的流后关闭;2. 如存在装饰流,只关闭装饰流即可,内层被装饰的流会自动关闭;3. 一个finally里中关闭多个流,需要分别try-catch,防止异常影响后续代码不执行。
可能有朋友会对【注1】的
os = null;
有疑问,这就引出了java的垃圾回收机制。
java垃圾回收的大原则是:JVM会在存储空间即将耗尽前,清理不再使用的对象,以释放空间。
此处,如果os关闭出现异常,则将os的引用置空,那么堆中流对象将被闲置,如果出现存储空间即将耗尽的情况,那么该对象将会被回收以释放空间,这就是此行代码的解释。
提到垃圾回收,我一下就联想到finalize()方法(或许是学习时区分final,finally,finalize()三者区别的面试题印象比较深)。在阅读5.5节之前,对finalize()理解停留在:Object类的方法,用于垃圾回收,没了。读后,对这部分加深了理解。
关于finalize(), 大原则是:能不用就不用,用也不用于清理操作。书中例子很有启发性:作为“终结条件”的验证。所谓终结条件,即对象将被清理时,应当处于某种状态,在执行finalize()时,校验这种状态,如果这个状态不满足预期,那么可能就是程序有缺陷。这个思路确实很巧妙,finalize()可能用的不多,但是这种思想如果外延到普通的程序状态验证,某种程度上确实会帮助我们定位问题。
同样的,这部分学习的还不够深入,后续再做补充。
相关文章推荐
- 关于.Net中垃圾回收机制的理解:
- 简单理解Java的垃圾回收机制与finalize方法的作用
- 对.Net 垃圾回收的C#编程相关方面(Finalize 和Dispose(bool disposing)和 Dispose())的一些理解体会
- [转]对.Net 垃圾回收的C#编程相关方面(Finalize 和Dispose(bool disposing)和 Dispose())的一些理解体会
- 【Java】关于JVM运行时内存空间、JVM垃圾回收机制
- C#垃圾回收Finalize 和Dispose的理解
- 深入理解 Java 垃圾回收机制
- IOS开发中关闭垃圾回收机制
- 深入理解 Java 垃圾回收机制
- 深入理解 Java 垃圾回收机制
- 理解 Java 垃圾回收机制
- 深入理解JVM--JVM垃圾回收机制
- 关于垃圾回收的机制与机理之孤岛垃圾
- 理解Flash Player 9垃圾回收机制
- 关于java的垃圾回收finalize()的用法
- java 垃圾回收机制 finalize System.gc
- 深入理解JVM--JVM垃圾回收机制
- 【红宝书笔记】一点关于JS的垃圾回收机制
- java 垃圾回收机制的理解
- 如何理解.net中的垃圾回收机制