java自动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}
}
现在,上面的代码看起来很ated肿,并且在不同层次结构中有多种检查异常,我们需要更多的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

java自动gc

java自动gc_具有Java 7中自动资源管理功能的GC相关推荐

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

    这篇文章简要概述了Java 7中引入的称为自动资源管理或ARM的新功能. 文章探讨了ARM如何减少开发人员为有效释放分配的资源的JVM堆而必须编写的代码. Java编程语言中编程的最甜蜜之处之一是对象 ...

  2. HTML如何实现单元格自动编号,如何在Excel中自动为列编号?

    如何在Excel中自动为列编号? 您是否曾经想过在Excel中对列进行编号? 本教程将讨论一些对列进行编号的方法. 通过公式= ROW()自动编号​​一列 如果要根据行号对列进行编号,可以键入此公式 ...

  3. java outlook 日历_使用Outlook中的“日历”功能管理日程的方法

    经常在外奔波的销售经理小黄,需要时刻掌控自己的日程.小黄通常使用Outlook中的"日历"功能来统一组织和管理自己的日程信息.当他外出办公,或者在差旅途中时,如若手边没有计算机,他 ...

  4. java自动编号_java实现自动编号系统(类似于word中自动编号)

    功能需求: 1,根据章节和当前标题数量,获得下一个编号,满足不同等级编号需求.如同word中的自动编号功能一样 2,可以实现在freemarker中直接调用生成方法,得到正确的编号 目标:即在free ...

  5. oracle自动撤销管理,Oracle 9i中自动撤销管理的优点分析

    在Oracle9i中,Oracle对回滚段进行了重新命名,现在将其作为撤销日志.在传统的操作上,回滚段保存交换的撤销信息,直到系统发送一个响应或者回滚语句. 人工撤销管理在Oracle9i仍然被使用, ...

  6. windows平台oracle自动job,oracle删除oem中自动备份job

    1.在oracle oem中可以执行自动备份的job,注意,其不在dba_jobs,dba_scheduler_jobs中 2.查看oem中的job select a.job_name, b.exec ...

  7. php如何实现自动加载mp3,PHP中自动加载的几种实现

    PHP自动加载是一个很有用的技巧,我们应该在项目中尽量使用autoload来减少维护类加载的工作. 使用__autoload 在使用PHP的项目中,如何实现自动加载对于新人总是一个很疑惑的问题,一般写 ...

  8. java 打印gc_输出Java的GC信息

    -verbose:gc -XX:+printGC 可以打印GC的简要信息 [GC 4790K->374K(15872K), 0.0001606 secs] [GC 4790K->374K( ...

  9. c语言字符数组自动填充,数组在C中自动填充

    我正在学习C,做一些简单的例子,并发现了这种奇怪的行为. 当填充整数数组的元素时,如果任何元素设置为大于2147483647(我相信是最大整数值?),则数组中的其余元素将设置为该确切数字,每个其中之一 ...

最新文章

  1. 美多商城之用户中心(收货地址3)
  2. 《统一沟通-微软-实战》-7-配置-3-响应组
  3. asp.net 2.0小TIPS两则
  4. mysql 8.0找不到my.ini配置文件解决方案
  5. linux ssh 登录后 空闲断开 解决方法
  6. 基于物化视图优化_CVPR2017|基于构造多视图子空间中的潜在表示解决聚类问题
  7. 小程序richtext_用于基于SWT的应用程序的RichText编辑器组件
  8. android中有哪些utils的作用,AndroidUtils
  9. vue click事件_Vue.js---实现前后端分离架构中前端页面搭建(二)
  10. javascript对数组的操作
  11. 网络舆情监测系统学习笔记——GIT的…
  12. DSP程序死机(跑飞)的一些情况-硬件原因
  13. 如何将视频生成二维码
  14. VS2013导出模板与删除导出模板
  15. 使用js实现网页录音并上传服务器
  16. 傅里叶变换时域和频域之间的对应关系
  17. 将多个BIN文件合成一个
  18. RuntimeError: Tensor for ‘out‘ is on CPU, Tensor for argument #1 ‘self‘ is on CPU, but expected them
  19. 物联网应用开发实践案例-智能家居
  20. 请编写一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。

热门文章

  1. Boostrap技能点整理之【网格系统】
  2. 前端防xss攻击(去掉空格等能影响和攻击数据库的字段)
  3. AndroidOkhttp3上传单个文件
  4. 虚拟机安装centeros7 无法连接网络 virsh命令找不到 删除多余的vir0 不然dubbo会有问题
  5. python递归算法_python递归算法(上)
  6. java switch语句_Java 14:查看更新的switch语句
  7. camel apache_短款Apache Camel K
  8. 微基准测试 r_在您的构建过程中添加微基准测试
  9. apache camel_Apache Camel的性能调整思路
  10. primefaces_PrimeFaces Mobile入门