//自动关闭的资源类使用示例try (YSOAPConnection soapConnection=YSOAPConnection.open(soapConnectionFactory)){SOAPMessage soapResponse = soapConnection.call(request, endpoint);...//数据操作} catch (Exception e) {log.error(e.getMessage(), e);...}
- lombok注解@Cleanup,对象生命周期结束时会调用public void close();对象需实现AutoCloseable接口
import lombok.Cleanup;@Cleanup// @Cleanup的使用YSOAPConnection soapConnection=YSOAPConnection.open(soapConnectionFactory)
12 资源不关闭,会导致什么最坏的结果- JDK的原生资源类不关闭,它也不会永远存在 。JVM会借助finalize自动关闭它,例如FileInputStream
//FileInputStream.java - JDK8//jdk8的FileInputStream重写了finalize,保证对象回收前开启的资源被关闭protected void finalize () throws IOException {if (guard != null) {guard.warnIfOpen();}if ((fd != null) && (fd != FileDescriptor.in)) {close();}}
- 在JDK9后,用Cleaner机制代替了finalize机制;Cleaner机制自动回收的对象同样需要实现AutoCloseable接口;Cleaner是基于PhantomReference实现的;对实现细节感兴趣的同学,可自行查阅下相关文档
- 但是使用JDK的提供的资源关闭机制的,那么资源的关闭比手动关闭时要延后很长时间的 。据测试,使用try-with-resources关闭资源,并让垃圾回收器回收它的时间在12纳秒 。而使用finalizer机制,时间增加到550纳秒
- 不及时关闭资源,就会占用资源,影响其他线程的执行;比如linux的文件资源,linux进程默认能打开的最大文件数是1024(有的是2048,此数值是可配置的);如果一个线程持有十几个文件资源,还要等550纳秒用finalizer机制释放资源,同进程的其他线程都等到花谢了
作者:clswcl
链接:https://juejin.im/post/6856266775022174222
来源:掘金
【一文让你读懂JAVA.IO、字符编码、URL和Spring.Resource】
推荐阅读
- 一文读懂神经网络的奥妙
- 一文看懂网上支付系统架构
- 豪华车|WLTP续航660不缩水 奔驰最贵纯电车全球首发:一图读懂EQS SUV
- 华为|7大家族产品齐飞!一文看懂华为终端商用产品线
- 两万字长文读懂 Java 集合
- 冬季皮肤瘙痒怎么办 只需7招让你远离烦恼
- 如何设置C盘禁止安装任何软件?3种方法,让你电脑5年不卡顿
- 喝白酒时,讲究这4个“最佳”,健康饮酒醉得慢,让你多喝二两半
- 会让你失财的家居风水 揭秘地毯也是增旺法宝
- 八种好风水的住宅形状让你生活更舒适