finalizer_Java Finalizer和Java文件输入/输出流

finalizer

在与主题直接合作或花时间学习它们之后,我经常会发现自己在网上注意到更多主题。 最近的Stephen Connolly ( CloudBees )发表了FileInputStream / FileOutputStream被认为有害的文章,引起了我的注意,因为我最近遇到了Java终结器的 问题 。 在那篇文章中 ,作者讨论了java.io.FileInputStream和java.io.FileOutputStream实现覆盖的finalize()方法FileInputStream.finalize()和FileOutputStream.finalize()的潜在后果。 谈到弃用JDK 9中的终结器 ,我的观点是,多年来我一直未曾想到的一个主题突然在我身边。

Connolly的帖子引用了Hadoop JIRA HDFS-8562 (“ HDFS性能受FileInputStream Finalizer影响”)。 该JIRA于2015年6月开放,其描述包括有趣的背景,说明FileInputStream的终结器为何会导致使用HDFS的用户FileInputStream问题。 这个JIRA也很有趣,因为它说明了为什么不更改FileInputStreamFileOutputStream而不使用protected finalize()方法并不容易。

HDFS-8562中引用了JDK-8080225 (“ FileInputStream清理应该加以改进。”),它于2015年5月编写。它指出:“如果尚未关闭FIS,则FileInputStream依赖于终结处理来执行最终关闭。 这会导致发生突发的GC的额外工作。 FileInputStreams的清理应尽早进行,并且不会增加GC的开销。” 艾伦·贝特曼(Alan Bateman)通过变通办法对此进行了评论,“通过使用Files.newInputStream可以轻松解决此问题。” 罗杰·里格斯(Roger Riggs)写道,要充分解决这个问题是很困难的,“由于未知/未知,有多少FIS / FOS子类可能依赖于重写或最终确定兼容性问题,这一点非常严重。 只有长期(多次发布)限制以弃用或使覆盖无效,才有可能最终消除兼容性问题。”

Connolly在文章结尾引用了Jenkins通过JENKINS-42934进行的更改 (“避免使用新的FileInputStream /新的FileOutputStream”)。 在那里提供了将new FileInputStream更改为Files.newInputStream的示例。

即使使用了FileInputStream类的类,我已经能够使用Java多年而不必担心终结器了,这一事实证明,就其本身而言,这些类与finalize()实现的有限使用并不一定会导致垃圾收集或其他问题。 我喜欢Colin P. McCabe在HDFS JIRA中阐明此问题的方式:“虽然确实在许多地方都使用FileInputStream / FileOutputStream,但这些地方中的大多数都有短暂的对象或仅使用很少的对象。 就像我之前提到的,终结器遇到的最大问题是短路读取流缓存。 如果我们能够解决此补丁程序试图解决的问题,那么我们将解决大多数问题。” 换句话说,并非所有对FileInputStreamFileOutputStream都引起关注。 使用工具识别与终结器相关的异常高的垃圾收集是识别需要解决的垃圾的最佳方法。

多年来的Java开发,我都没有使用过Java终结器。 近几个月来,这已经成为一个问题,我看到越来越多的人正在处理。 淘汰Java终结器是将其从核心API中删除的一个很好的第一步。

翻译自: https://www.javacodegeeks.com/2017/04/java-finalizer-java-file-inputoutput-streams.html

finalizer

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

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

相关文章

unity 陶瓷质感_一种基于Unity3D的虚拟陶瓷设计方法与流程

本发明涉及虚拟现实领域,特别涉及一种基于Unity3D的虚拟陶瓷设计方法。背景技术:陶艺工艺制作环境要求严格:不仅在拉坯成型需要利用旋转机器,在烧制过程则需要窑炉锻造,如何将陶瓷制作工艺与虚拟现实开发完美结合在一起…

java 中怎么加汉字,jquery怎么向body里面增加文字

jquery如何向里面增加文字jsp代码是这样的:我想在页面加载时动态的将一行文字增加到里面,不知道为什么总是加不进去,js代码如下:$(document).ready(function(){if($("#type").val()"MESSAGE") {$(".ke-t…

MacBook 推出移动硬盘时总是提示有程序在使用它,如何解决?

如下图所示: 先使用命令 df -lh 在终端查看当前系统的所有硬盘,命令如下: liaowenxiongliaowenxiongdeMacBook-Air ~ % df -lh Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk1s5s1 234Gi…

m_map投影_MATLAB使用m_map工具箱演示绘制m_map logo

第二,新建脚本(CtrlN),输入如下代码:close all; clear all; clcm_proj(ortho,lat,45,long,-95);m_coast(color,[0,1,0],linewidth,5);m_coast(patch,r);m_grid(linestyle,:,xticklabels,[],yticklabels,[]);patch(0.5*[-1,1,1,-1],0.25*[1,1,…

webcrypto库下载_使用WebCrypto API的电子签名

webcrypto库下载有时我们需要让用户进行电子签名。 通常,人们会理解为以某种方式将您的手写签名放置在屏幕上。 根据管辖范围,可能很好,或者仅存储图像可能还不够。 例如,在欧洲,有910/2014号法规 ,该法规定…

21朵水仙花算法java,柏拉图说,如果你有两块面包,你应当用一块去换一朵水仙花。。。。。...

昨天做了一回“黑心商贩”,和我们的团伙一起去卖花了。街上的小情侣们很甜蜜啊,看男孩们眼里的宠爱和迁就还有女孩们小鸟依人的姿态,真是替他们幸福啊!(我跟这儿瞎激动啥啊!)关键是,正谈恋爱的小情侣们掏钱…

Linux 命令之 ps -- 显示进程状态/查看进程信息

文章目录介绍语法格式常用选项命令示例示例 1,查看进程的 PID、名称以及 CPU 占用率示例 2,查看所有的进程示例 3,按内存资源的使用量对进程进行排序示例 4,按 CPU 资源的使用量对进程进行排序示例 5,显示所有进程信息…

ts获取服务器数据_怎么使用Satruts2实现页面列表数据导出到Excel表格

Java codeprivate InputStream excelFile;public void setExcelFile(InputStream excelFile) {this.excelFile excelFile;}public InputStream getExcelFile() {return excelFile;}public String createExcelFile() {try {String[] headName { "昵称","电子邮…

java登录界面命令_Java命令行界面(第5部分):JewelCli

java登录界面命令细算在Java命令行处理与Apache的百科全书CLI , args4j , jbock和命令行中先前的文章,我把注意力转向在这个岗位使用JewelCli完成的命令行参数相似的处理Java中。 几个Java命令行处理库使用批注来定义命令行选项。 到目前为止…

matlab 三维图像配准,[转载]Matlab实现多种图像配准(转)

本文讲述如何利用Matlab Image Processing Toolbox中的图像配准工具实现线性正投影、仿射、投影、多项式、分段线性、局部加权平均配准的过程。实验平台X86 PC,Windows XP sp2, Matlab 7.1资源的获取matlab工具的使用方法:查看帮助mage Processing Toolb…

Linux 命令之 pstree -- 以树状图显示进程/查看进程信息

文章目录介绍常用选项命令示例介绍 Linux 系统中 pstree 命令的英文全称是“process tree”,即将所有进程以树状图显示,树状图将会以 pid (如果有指定) 或是以 init 这个基本进程为根 (root),如果有指定使用者 id,则树状图会只显…

totolinkn200up怎么设置_totolinkN200R无线路由器如何设置啊,求高人指点

展开全部totolinkN200R无线路e68a84e8a2ad3231313335323631343130323136353331333337393532由器设置方法:【设置无线路由器方法】【家庭网络环境布线】:1、有猫(modem):猫(modem)----路由器wan口;路由器lan口----电脑。2、没有猫(…

jersey 入门示例_Jersey Web Service Hello World Java示例

jersey 入门示例在Restlet之后, Jersey是另一个流行的开源框架,可以用Java创建RESTful Web服务 。 Jersey符合JAX-RS规范,实际上它是JAX-RS(JSR 311)(http://jsr311.java.net/nonav/releases/1.1/index.htm…

php domdocument getelementbyid,PHP DOMDocument- getElementByID添加Â代替空

PHP DOMDocument-> getElementByID添加代替空(PHP DOMDocument->getElementByID adding in place of empty )我正在使用PHP的DOMDocument对象来解析一些HTML(使用cURL获取)。 当我按ID获取元素并输出它时,任何空的 标记都会获得一个额外的字符并变为 。代码…

Linux 命令之 whois 命令-用于查找并显示用户信息

文章目录介绍参考示例介绍 whois指令会去查找并显示指定帐号的用户相关信息,因为它是到Network Solutions的WHOIS数据库去查找,所以该帐号名称必须在上面注册方能寻获,且名称没有大小写的差别。 参考示例 [rootlocalhost www]# whois root…

gptuefi优势_UEFI+GPT的区别,有啥不同?写的很详细易懂

搜索相关知识时看到的好文章,由于百度空间挂了,在此注明出处作者QQ:407647406以表谢意,原地址戳我其实楼主早就知道UEFI,曾经也一直关注并试图了解,无奈限于当时国内有关资料匮乏,实在找不到什么使用有效能…

oauth2和jwt_OAuth2,JWT,Open-ID Connect和其他令人困惑的事物

oauth2和jwt免责声明 如果觉得我必须从一个重要的免责声明开始这篇文章: 不要太相信我要说的话。 我之所以这样说,是因为我们正在讨论安全性。 而且, 当您谈论安全性时,除了100%正确的陈述外,还有冒任何其他…

matlab的exec程序,C++调用Matlab画图的一段程序

劳动节闲来无事,写了一天程序,just for fun.看,这是C调用Matlab画图的一段程序。暂时不想多解释了,有兴趣的话,看看下面的代码吧。以下几段代码由上到下,越来越旧。最上面的是最新更新的版本。#include#inc…

Linux 命令之 iwconfig 命令-配置无线网络接口

文章目录介绍常用选项参考文档介绍 使用iwconfig命令可以为无线接口显示或设置网络接口的参数,它可以用来配置无线网络接口,是非常好用的。 常用选项 选项说明essid设置无线网卡的ESSID(Extension Service Set ID)。通过ESSID来区分不同的无线网络&am…

java gc cms_Java垃圾收集器:G1GC何时将CMS强制退出?

java gc cms在针对JDK 9(2017/4/4)提出的JEP中 , Mark Reinhold写道JEP 291 (“弃用并发标记扫描(CMS)垃圾收集器”)是“已被放置在在讨论和审查后,由所有者将其定位为目标”。 如果…