- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java理论与实践良好的内务处理实践.doc
Java 理论与实践: 良好的内务处理实践
您的资源是否没有及时释放?
垃圾收集几乎是每个开发人员都喜爱的一个 Java? 平台特性,它简化了开发,消除了所有种类的潜在代码错误。可尽管垃圾收集一般来说可以让您无需进行资源管理,有时候您还是必须自己进行一些内务处理。在本期的 Java 理论与实践 中,Brian Goetz 讨论了垃圾收集的局限性,并指出了您必须自己做内务处理的场景。
小时候,父母总是叮嘱我们玩了玩具之后要收好。如果您仔细想想,其实这种唠叨并不过分,要保持整洁是因为存在实际的限制,房间里没有太多的空间,如果到处堆满了玩具,那么连走路都无处下脚了。
如果有了足够的空间,保持整洁就不是那么必要了。空间越多,就越不必要保持整洁。Arlo Guthrie 著名的民谣 Alices Restaurant Massacre 说明了这一点:
他们住在教堂楼下的大厅,里面的椅子全都搬走了,剩下一个空荡荡的大房间,所以他们想,很长时间都不用把垃圾扔出去,有的是地方装垃圾……
无论如何,垃圾收集可以帮我们减轻内务整理方面的工作。
显式地释放资源
Java 程序中使用的绝大多数资源都是对象,垃圾收集在清理对象方面做得很好。因此,您可以使用任意多的 String。垃圾收集器最终无需您的干预就会算出它们何时失效,并收回它们使用的内存。
另一方面,像文件句柄和套接字句柄这类非内存资源必须由程序显式地释放,比如使用 close()、destroy()、shutdown() 或 release() 这样的方法来释放。有些类,比如平台类库中的文件句柄流实现,提供终结器(finalizer)作为安全保证,以便当垃圾收集器确定程序不再使用资源而程序却忘了释放资源时,终结器还可以来做这个释放工作。但是尽管文件句柄提供了终结器来在您忘记了时为您释放资源,最好还是在使用完之后显式地释放资源。这样做可以更早地释放资源,降低了资源耗尽的可能。
对于有些资源来说,一直等到终结(finalization)释放它们是不可取的。对于重要的资源,比如锁获取和信号量许可证,Lock 或 Semaphore 直到很晚都可能不会被垃圾收集掉。对于数据库连接这样的资源,如果您等待终结,那么肯定会消耗完资源。许多数据库服务器根据许可的容量,只接受一定数量的连接。如果服务器应用程序为每个请求都打开一个新的数据库连接,然后用完之后就不管了,那么数据库远远未到终结器关闭不再需要的连接,就会到达它的最高容量。
只限于一个方法的资源
多数资源都不会持续整个应用程序的生命周期,相反,它们只被用于一个活动的生命周期。当应用程序打开一个文件句柄读取文件以处理文档时,它通常读取文件后就不再需要文件句柄了。
在最简单的情况下,资源在同一个方法调用中被获取、使用和释放,比如清单 1 中的 loadPropertiesBadly() 方法:
清单 1. 不正确地在一个方法中获取、使用和释放资源 —— 不要这样做
public static Properties loadPropertiesBadly(String fileName)
throws IOException {
FileInputStream stream = new FileInputStream(fileName);
Properties props = new Properties();
props.load(stream);
stream.close();
return props;
}
不幸的是,这个例子存在潜在的资源泄漏。如果一切进展顺利,流将会在方法返回之前被关闭。但是如果 props.load() 方法抛出一个 IOException,那么流则不会被关闭(直到垃圾收集器运行其终结器)。解决方案是使用 try...finally 机制来确保流被关闭,而不管是否发生错误,如清单 2 所示:
清单 2. 正确地在一个方法中获取、使用和释放资源
public static Properties loadProperties(String fileName)
throws IOException {
FileInputStream stream = new FileInputStream(fileName);
try {
Properties props = new Properties();
props.load(stream);
return pr
您可能关注的文档
- EXCEL进阶教程-清湖社区学堂.ppt
- Extraction因子提取子对话框.ppt
- E世代大学生适应问题与辅导-学生事务处.doc
- F620中文说明书.doc
- FIR数字滤波器的FPGA实现研究.doc.doc
- goodtoGreat-东吴大学.ppt
- hadron截面的测量.ppt
- IGBT的特性和应用-世纪电源网.doc
- IOI国际信息学奥林匹克-泉州五中.doc
- JAVA技术介绍-Read.ppt
- 2025年烟台市正大城市建设发展有限公司招聘工作人员12名笔试参考题库附带答案详解.doc
- 2025年衢州市属国企公开招聘工作人员笔试参考题库附带答案详解.doc
- 2025中铁四局集团有限公司法律合规部公开招聘1人笔试参考题库附带答案详解.docx
- 2025中国建筑股份有限公司岗位招聘【人力资源部(干部人事部)】笔试参考题库附带答案详解.docx
- 2025年滁州定远县中盐东兴盐化股份有限公司招聘2人笔试参考题库附带答案详解.doc
- DB1331T109-2025雄安新区建设工程抗震设防标准(963.84KB)(1).pdf
- 2025辽宁省能源控股集团所属抚矿集团招聘76人笔试参考题库附带答案详解.pdf
- 2024陕西延长石油集团华特新材料股份有限公司社会招聘8人笔试参考题库附带答案详解.pdf
- 2023内蒙古大唐国际锡林浩特矿业有限公司采煤自营专项社会招聘32人笔试参考题库附带答案详解.pdf
- 2024年12月云南大学国际合作与交流处公开招聘(1人)笔试历年典型考题(历年真题考点)解题思路附带答案详解.doc
最近下载
- 个体防护装备配备规范.pdf VIP
- 尾矿库安全规程.docx VIP
- 工作场所有害因素职业接触限值 第2部分物理有害因素.doc VIP
- DX—TH2使用与维护说明书附图.doc VIP
- 危险化学品单位应急救援物资配备要求.pdf VIP
- GB30000.26-2013 化学品分类和标签规范 第26部分:特异性靶器官毒性 反复接触.pdf VIP
- 2025《速度、力度与常用音乐术语》大单元整体教学设计.docx
- GB 30000.28-2013 化学品分类和标签规范 第28部分:对水生环境的危害.docx VIP
- GB30000.27-2013 化学品分类和标签规范 第27部分:吸入危害.pdf VIP
- GB30000.25-2013 化学品分类和标签规范 第25部分:特异性靶器官毒性 一次接触.pdf VIP
文档评论(0)