java建议:避免使用终结方法
1.美图
终结方法(finalizer) 通常是不可预测的,也是很危险的,一般情况下是不必要的。使用
终结方法会导致行为不稳定、降低性能,以及可移植性问题。当然,终结方法也有其可用之处,我们将在本条目的最后再做介绍;但是根据经验,应该避免使用终结方法。
C++的程序员被告知“不要把终结方法当作是C++中析构器(destructors)的对应物”。在
C++中,析构器是回收一个对象所占用资源的常规方法,是构造器所必需的对应物。在Java中,当一个对象变得不可到达的时候,垃圾回收器会回收与该对象相关联的存储空间,并不需要程序员做专门的工作。C++的析构器也可以被用来回收其他的非内存资源。而在Java中,一般用try-finally块来完成类似的工作。
终结方法的缺点在于不能保证会被及时地执行[JLS,12.6]。从一个对象变得不可到达开始,到它的终结方法被执行,所花费的这段时间是任意长的。这意味着,注重时间(time critical)的任务不应该由终结方法来完成。例如,用终结方法来关闭已经打开的文件,这是严重错误,因为打开文件的描述符是一种很有限的资源。由于JVM会延迟执行终结方法,所以大量的文件会保留在打开状态,当一个程序再不能打开文件的时候,它可能会运行失败。<
java建议:避免使用终结方法相关推荐
- Effective Java之避免使用终结方法(七)
1.终结方法的缺点 1.终结方法不能保证及时执行,因此注重时间的任务不应该由终结方法来完成.例如:用终结方法去关闭已经打开的文件,这是一种严重错误,因为打开文件描述符是一种很有限的资源,如果jvm延迟 ...
- java中finalizer终结方法学习心得
最近在看java的中finalizer终结方法,也就是用来释放内存的,但这绝对和C++中的析构函数不相同 C++中的析构函数是用来回收对象所占用的资源的方法,而在java中,当一个对象不可到达时(也就 ...
- 《Effective Java》阅读笔记7 避免使用终结方法
1.序 本条的意思是,让你尽量不要在你的类中覆盖finalize方法,然后在在里面写一些释放你的类中资源的语句. 1.1为什么要避免覆盖并使用finalize方法? (1)finalize方法不能保证 ...
- Effective Java第七条:避免使用终结方法
第七条:避免使用终结方法 1, 终结方法(finalizer)会让程序不稳定,性能降低,出现可移植性的问题. 2, Finalizer在c++中师析构器(destructors)的一部分,用作回收 ...
- Java游戏守卫者_effective java 终结方法守卫者 demo
effective java 第2章:创建和销毁对象.第7条 : 避免使用终结方法.最后的"终结方法守卫者 (finalizer guardian)"的例子,以加深理解. publ ...
- 编写高质量代码:改善Java程序的151个建议 (第1章 Java开发中通用的方法和准则)
第1章 Java开发中通用的方法和准则 The reasonable man adapts himself to the world;the unreasonable one persists in ...
- 好程序员Java学习路线分享finalize()方法详解
好程序员Java学习路线分享finalize()方法详解,前言,finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法.. fi ...
- [改善Java代码]不使用stop方法停止线程
线程启动完毕后,在运行可能需要终止,Java提供的终止方法只有一个stop,但是不建议使用此方法,因为它有以下三个问题: (1)stop方法是过时的 从Java编码规则来说,已经过时的方式不建议采用. ...
- java.lang.OutOfMemoryError异常解决方法
java.lang.OutOfmemoryError: PermGen Space 的错误,导致项目无法正常运行. 出现这个错误的原因,总结一下: PermGen Space指的是内存的永久保存区,该 ...
最新文章
- NLP入门竞赛,搜狗新闻文本分类!拿几十万奖金!
- dubbo扫描第三方包_今天来浅谈一下dubbo
- java 运行环境变量,java运行环境 和 环境变量的配置
- 一步一步学Silverlight 2系列(13):数据与通信之WebRequest
- pycharm报错(Non-zero exit code (2))与手动安装报错
- 数据链路层差错控制——奇偶校验码、循环冗余码和汉明码(海明码)
- J - 数塔 HDU - 2084(深搜,记忆化搜索+)
- 内置函数与lambda匿名函数
- 九度OJ 1048:判断三角形类型
- linux设备模型之tty驱动架构分析,linux设备模型之uart驱动架构分析
- 在linux下使用ftp客户端命令
- Atitit usrQBM2331 参数格式化规范
- 新闻本身具有数量大、更新快、冗余度高
- win10-11全版本下载地址MSDN纯净版ISO-20220217更新
- 计算机常用单词 pdf,关于计算机的常用词汇.pdf
- 光线追踪(RayTracing)算法理论与实践(三)光照
- Java对象扁平化的操作
- 魔众EDM邮件营销系统 v1.0.0 专业的EDM邮件营销系统
- 衡量子空间相似度和距离的主角 principal angles
- python request.get
热门文章
- 索尼Xperia 5 II官方高清渲染图曝光:还是那个熟悉的小屏旗舰
- 官方晒一加8系列旗舰关键配置:号称更极致的屏幕机皇
- 腾讯32款游戏退市,只因为这个理由!
- 双11 iPhone再降价:24期免息 四舍五入等于不要钱!
- 苹果首席芯片设计师离职 曾领导自A7以来所有芯片设计
- C语言教程第六章:指针(1)
- 前端面试汇总(Bootstrap框架)
- python37从零开始学_从零开始学Python【37】--朴素贝叶斯模型(理论部分)
- win10远程登陆deepin xrdp
- php的limit分页,用php数组的array_slice分页和用limit查询分页哪个效率更高?