具有Java 7中自动资源管理功能的GC

这篇文章简要概述了Java 7中引入的称为自动资源管理或ARM的新功能。 文章探讨了ARM如何减少开发人员为有效释放分配的资源的JVM堆而必须编写的代码。
Java编程语言中编程的最甜蜜之处之一是对象取消分配的自动处理。 在Java世界中,这通常被称为垃圾收集。 基本上,这意味着开发人员不必担心取消分配其代码分配的对象。 开发人员使用完该对象后,他便可以使对该对象的所有引用无效,然后该对象就有资格进行垃圾回收。
但是,垃圾收集有其另一面。 与C / C ++中的编码器完全控制内存分配和取消分配(malloc,free,new,delete等)不同,在Java中,开发人员对对象的取消分配过程没有明显的控制。 JVM管理未使用对象的垃圾回收过程,而运行一个垃圾回收周期实际上取决于JVM的想法。 确实,有诸如System.gc()或Runtime.getRuntime()。gc()之类的方法调用,它们指示将运行垃圾回收,但是这些方法仅用于提醒JVM:“也许您需要运行垃圾现在收集,只是一个建议,没有压力!”。 JVM被完全授权忽略这些请求,并且被编码为仅在真正合适时运行垃圾回收。 因此,在实践中,始终建议开发人员不要相信System.gc()或Runtime.getRuntime()。gc()将触发完整的垃圾回收,从而不要构建其程序逻辑。
无可否认,自动垃圾收集为提高开发人员的生产力做了多少工作。 但是,在某些极端情况下,垃圾回收不足以保持“干净”堆,其中没有未使用的对象。 尤其是当对象处理由底层操作系统提供服务的某种形式的本机资源时。 这些对象包括但不限于IO流,数据库连接等。对于此类对象,开发人员必须明确释放资源。 通常,这些是通过try-catch块完成的。
让我们看一个小示例,该示例在完成流处理之后关闭InputStream:
InputStream in = null;try
{in = new FileInputStream(new File("test.txt");//do stuff with in
}
catch(IOException ie)
{//SOPs
}
finally
{//do cleanup
}
以上看起来不错,干净; 但是,一旦我们尝试通过finally块中的in.close()关闭输入流,就需要用try-catch块将其包围,该块捕获已检查的异常IOException。 因此,代码示例将转换为:
InputStream in = null;try
{in = new FileInputStream(new File("test.txt"));//do stuff with in
}
catch(IOException ie)
{//SOPs
}
finally
{try{in.close();}catch(IOException ioe){//can't do anything about it}
}
现在,上面的代码看起来很肿,并且在不同层次结构中有多种检查异常,我们需要更多的catch子句。 很快,代码变得冗长且难以维护,更不用说代码失去了其最初的简洁外观,甚至吸引了人们的目光。
但是有个好消息。
Java 7通过新的try-catch块使此操作更容易。 使用此功能,我们可以避免finally块本身。 这是我们的做法:
try(InputStream in = new FileInputStream(new File("test.txt"))
{//do stuff with in
}
catch(IOException ie)
{//SOPs
}
上面的代码块将自己进行清理。 通过引入新接口java.lang.AutoCloseable使其成为可能,该接口定义了单个方法void close()throws Exception 。 使用上述语法,可以自动关闭()d此接口子类型的对象。 以上功能适用于实现AutoCloseable接口的任何类的对象。
最好的部分是,即使我们在try()块中初始化了多个AutoCloseable实例,它也会为所有对象调用close()方法,即使某个对象上的某些close()方法抛出任何异常。
在处理异常时,如果在try块以及隐式finally块(实际上已关闭AutoCloseable的块)中存在任何IOException,则抛出的异常将是在try块中抛出的异常而不是隐式的finally块中的那个。
但是,我们仍然可以从Throwable.getSuppressed()方法中获取隐式finally块异常的详细信息,该方法作为Java 7中的新方法添加。
我认为自动资源管理功能或ARM是Java 7的重要补充。
编码愉快!

参考: Java HotSpot博客上的JCG合作伙伴 Swaranga提供了Java 7中具有自动资源管理功能的垃圾收集 。

相关文章 :
  • Java 7:尝试资源
  • 速览Java 7 MethodHandle及其用法
  • Java Fork / Join进行并行编程
  • JDK中的设计模式
  • Java最佳实践

翻译自: https://www.javacodegeeks.com/2011/08/gc-with-automatic-resource-management.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP学习笔记(六)

《Wordpress 50个过滤钩子》 1-10 过滤钩子是一类函数,wordpress执行传递和处理数据的过程中,在针对这些数据做出某些动作之前的特定点执行。本质上,就是在wordpress输出之前,将对浏览数据做出反应。 添加过滤钩子: ad…

JS 操作 radio input(cc问卷管理)

1、选中特定的单选按钮 function showDetail(content){$("input[name^radio]").removeAttr("checked");for(var i0;i<content.length;i){$("#radio"(i1)content.substr(i,1)).attr("checked","checked");} }2、手动添加问…

国内外著名黑客杂志

国外黑客杂志&#xff1a; 《phrack》黑客杂志 http://www.phrack.org 《phrack》创刊于80年代&#xff0c;是世界级的顶级黑客杂志&#xff0c;每年只有一期&#xff0c;现已出了65期&#xff0c;国人似乎至今只有三人在上面发表发表文章&#xff0c;三人好像都是绿盟的人&…

团体项目随笔

我们的团体项目不仅在在课堂上讨论了很久&#xff0c;课后也是几经讨论。每个人都有不同的想法我特别想做一个基于Web编写的驴客网&#xff0c;因为基于个人需求&#xff0c;在最终的讨论中被毙掉。 我们组最终的的讨论结果是写个游戏&#xff0c;关于游戏的发展&#xff0c;这…

Apache Lucene拼写检查器的“您是不是要”功能

Google的“您是不是要”功能 在上一篇文章中对Lucene进行了介绍之后 &#xff0c;现在是时候提高它&#xff0c;创建一个更复杂的应用程序了。 您肯定最熟悉Google的“您是不是要”功能&#xff08;其他搜索引擎也支持此功能&#xff09;。 这是一个例子&#xff1a; Lucene …

Android-做个性化的进度条

1.案例效果图 2.准备素材 progress1.png(78*78) progress2.png(78*78) 3.原理 采用一张图片作为ProgressBar的背景图片(一般采用颜色比较浅的)。另一张是进度条的图片(一般采用颜色比较深的图片)。进度在滚动时&#xff1a;进度图片逐步显示&#xff0c;背景图片逐…

汇编小记16/3/27

最后更新2016-03-27 21:05:06 [address]与[bx] [address] 在debug中mov ax,[0] 等价于mov ax,ds:[0] [0]表示内存偏移地址 但是在masm汇编解释器中&#xff0c;mov ax,[0] 等价于mov ax,0 [0]表示常量0 [bx] mov ax,[bx] 表示 bx存放的数据为一个偏移地址&#xff0c;段…

ConcurrentLinkedHashMap v 1.0.1发布

大家好&#xff0c;我们发布了并发LinkedHashMap实现的1.0.1版本。 在最新版本中&#xff0c;已进行了一些较小的修改&#xff0c;以在多个线程遍历映射的元素时提高性能。 最新版本还引入了可插拔驱逐策略。 当然&#xff0c;您可以实现自定义逐出策略&#xff0c;也可以将它…

BOMbing The System

roy g bivFebruary 2011 [Back to index] [Comments (0)] What is a BOM? Why should we care? Great, can we do that? Okay, lets do it! Unicode in files Greets to friendly people (A-Z) What is a BOM? Its not the thing that explodes. Thats a BOMB. Heh. BO…

鸟哥的linux私房菜学习笔记 ---第7章-2

1,文件内容查阅的命令: cat ,tac nl,more, less,head,tail ,od 文件的查阅参数,显示行号如何显示行号 nl 中的所有参数都是关于如何显示行号的 这里面less的功能更多,更灵活 :空格 下一页 pageup上一页 pagedown 下一页 /string 字符串查询 ?string 反向字符串查询 man的命…

HDU - 4497 GCD and LCM

题意&#xff1a;给出三个数的gcd,lcm&#xff0c;求这三个数的全部的可能 思路 &#xff1a;设x,y,z的gcd为d&#xff0c;那么设xd*a&#xff0c;yd*b&#xff0c;zd*c。a&#xff0c;b。c肯定是互质的。那么lcmd*a*b*c,所以我们能够得到a*b*clcm/gcdans,将ans分解因数后&…

Java Lambda语法替代

关于lambda-dev邮件列表的讨论已经开始解决lambdas /函数文字的Java语言语法应该是什么样的问题。 让我们看一个稍微平凡的例子&#xff0c;然后尝试弄清楚问题。 Perl的人有一个很好的例子&#xff0c;说明以某种功能性的方式使用函数引用–他们称其为Schwartzian变换&#xf…

浅析SMC技术

今天让我们来看Win32ASM里面的高级一点的技术——SMC&#xff08;当当当当……&#xff09;&#xff01;&#xff01;&#xff01;SMC是什么意思&#xff1f;它的英文名叫“Self Modifying Code”&#xff0c;顾名思义&#xff0c;就是“代码自修改”&#xff08;&#xff1f;&…

JAVA基础--程序是顺序执行的

class Testa {public static void main(String[] args) {String aa"aaa";String bb"bbb"aa;aa"cccc";System.out.println(bb);} } 输出的是 “bbbaaa class Testa {public static void main(String[] args) {String aa"aaa";String …

Spring MVC拦截器示例

我以为是时候看看Spring的MVC拦截器机制了&#xff0c;这种机制已经存在了很多年&#xff0c;并且是一个非常有用的工具。 Spring Interceptor会按照提示进行操作&#xff1a;在传入的HTTP请求到达您的Spring MVC控制器类之前对其进行拦截&#xff0c;或者相反&#xff0c;在其…

Android 调用系统的分享[完美实现同一时候分享图片和文字]

android 系统的分享功能 private void share(String content, Uri uri){Intent shareIntent new Intent(Intent.ACTION_SEND); if(uri!null){//uri 是图片的地址shareIntent.putExtra(Intent.EXTRA_STREAM, uri);shareIntent.setType("image/*"); //当用户选择短信时…

团队行为守则—如果你们由我来领导

&#xfeff;&#xfeff;如果你是在我领导的团队里&#xff0c;有几个额外的事情我要告诉你。我深信这些行为守则是一个高效团队的润滑剂&#xff0c;我并不只是要求别人这样做&#xff0c;我自己也严格恪守。 只有三样事&#xff1a; 问&#xff1a;如果你对任务不清楚&#…

做短,但做对!

编写简洁&#xff0c;优雅&#xff0c;清晰的代码一直是开发人员的艰巨任务。 您的同事不仅会感谢您&#xff0c;而且您会惊讶地发现&#xff0c;不断期待着重构解决方案以更少的代码完成更多&#xff08;或至少相同&#xff09;的工作是多么令人兴奋。 曾经有人说好的程序员是…

math

莫比乌斯反演&#xff1a; $F(n) \sum\limits_{d|n} {f(d)} \Leftrightarrow \sum\limits_{d|n} {\mu (d)F(\frac{n}{d})} $ 其中 ${\mu (d)}$为莫比乌斯函数: 若$d$等于0 , 则${\mu (d)}$1 若$d {p_1}{p_2}{p_3}...{p_k}$ , ${p_i}$为互异质数&#xff0c;则${\mu (d)}$${( …

(笔试题)二进制1的个数相同的距离最小数

题目&#xff1a; 输入&#xff1a;整数A输出&#xff1a;整数B条件&#xff1a;A和B的二进制1的个数相同&#xff0c;且A和B之间的距离|A-B|最小。思路&#xff1a; 题目没有说明整数类型&#xff0c;这里认为是带符号的整数&#xff0c;即区分正负数。 根据题意&#xff0c;A…