为什么80%的码农都做不了架构师?>>>   

5.5清理:终结处理和垃圾回收

1.对象可能不被垃圾回收

2.垃圾回收并不等于“析构”

3.垃圾回收只与内存有关

5.5.1finalize()的用途何在

Java有垃圾回收器负责回收无用对象占据的内存资源。但也有特殊情况:假定你的对象(并非使用new)获得一块“特殊”的内存区域,由于垃圾回收器只知道释放那些经由new分配的内存,所以它不知道该如何释放该对象的这块“特殊”内存。为此Java允许在类中定义一个名为finalize()的方法。

它的工作原理“假定”是这样的:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一个垃圾回收动作发生时,才会真正回收对象占用的内存。

5.5.2你必须实施清理

无论是“垃圾回收”还是“终结”,都不保证一定会发生。如果Java虚拟机(JVM)并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾回收以恢复内存的。

5.5.3终结条件

当对某个对象不再感兴趣——也就是它可以被清理了,这个对象应该处于某种状态,使它占用的内存可以安全地释放。例如:要是对象代表了一个打开的文件,在对象被回收前程序员应该关闭这个文件。只要对象中存在没有被适当清理的部分,程序就存在很隐晦的缺陷。finalize()可以用来最终发现这种情况——尽管它并不总是会被调用。

以下是一个简单地例子,示范finalize()可能的使用的方式:

package com.H;/*** * @author l**/
class Book {boolean checkedOut = false;Book(boolean checkOut) {checkedOut = checkOut;}void checkIn() {checkedOut = false;}protected void finalize() {if (checkedOut) {System.out.println("Erro: checked out");}}
}public class TerminationCondition {public static void main(String[] args) {Book novel = new Book(true);novel.checkIn();new Book(true);System.gc();}}/*Output:
Erro: checked out
*///:~

所以Book对象在被当作垃圾回收前都应该被签入(ckeck in)。但是main()方法中,由于程序员的错误,有一本未被签入。要是没有finalize()来验证终结条件,将很难发现缺陷。

注:System.gc()用于强制进行终结动作。即使不这么做,通过重复地执行程序(假设程序将分配大量的存储空间而导致垃圾回收动作的执行),最终也能找出错误的Book对象。

转载于:https://my.oschina.net/869088067/blog/733812

第五章ThinkingInJava相关推荐

  1. 王道考研 计算机网络笔记 第五章:传输层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

  2. 数字图像处理——第五章 图像复原与重建

    数字图像处理--第五章 图像复原与重建 文章目录 数字图像处理--第五章 图像复原与重建 写在前面 1 图像退化/复原过程的模型 2 噪声模型 2.1 高斯噪声 2.2 椒盐噪声 3 仅有噪声的复原- ...

  3. c语言逐步搜索法求有根区间,[C语言第五章.ppt

    [C语言第五章 算法举例 基本思想是,根据提出的问题,列举所有可能的情况,并 用问题中给定的条件检验哪些是需要的,哪些是不需要的. 教学进程 列举与试探 列举法常用于解决"是否存在" ...

  4. 2018-4-8蚁群算法---包子阳《智能优化算法以及Matlab实现》第五章

    资料来源: <智能优化算法以及matlab实现>包子阳  余继周 编著 第五章-----蚁群算法 是一种元启发式优化算法(自己理解:就是作为群体的单位个体也就是元,在里面充当着随机的选择搜 ...

  5. Linux内核分析——第五章 系统调用

    第五章 系统调用 5.1 与内核通信 1.系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: (1)为用户空间提供了一种硬件的抽象接口 (2)系统调用保证了系统的稳定和安全 ( ...

  6. 2021 线性代数 第五章 习题课

    第5章 实对称矩阵与二次型 5.1 实对称矩阵的对角化(基础部分) 5.1 实对称矩阵的对角化(提高部分) 5.2 二次型及标准形(基础部分) 5.2 二次型及标准形(提高部分) 5.3 正定二次型与 ...

  7. java十五章_java:第十五章

    第十五章 字符串1.字符串(String)的定义 String str="内容"; String str=new String(); //内容为null String str=ne ...

  8. 国内第一本律师撰写的海关法律专业书籍-《企业如何应对海关行政处罚》-第五章...

    第五章 当企业遭遇申报不实 被海关认定"申报不实"往往是困扰企业尤其是海关信誉良好企业的一块心病,企业这种不知不觉状态下的违规是何原因造成?企业如何规避? 第一节 遭遇申报不实,企 ...

  9. 第五章 RNA-seq分析

    第五章 RNA-seq分析 主要为RNA-seq相关知识,部分内容作笔记自查使用.如有错误或遗漏还请海涵,可评论或邮箱联系. 最后修改时间:2020-09-01 16:11:38 星期二 转录组研究方 ...

最新文章

  1. window.location.reload() 刷新页面时,如何不弹出提示框
  2. 买房猛于虎《功夫熊猫无家可归》
  3. Movavi PDF Editor 3中文版
  4. 用c语言构建二叉树(重点)
  5. 面试题:InnoDB 中一棵 B+ 树能存多少行数据?【面试不翻车,翻车就跑路】
  6. linux search用法,在Linux中使用ldapsearch只返回一个值
  7. Html5学习进阶一 视频和音频
  8. 苹果mac最好用的SVN客户端:Cornerstone 4 (SVN管理工具)
  9. 分享12306秒票杀手锏源码
  10. Interactive Data Display如何显示菜单?
  11. android andbase,andbase
  12. 视频联网云平台EasyCVR集成海康EHome协议系列——配置及协议介绍
  13. 什么是Podfile呢?送给你来自官网的介绍
  14. 杨咩咩的编程求学之路之开篇
  15. 5种经典的数据分析思维和方法
  16. 解决centOS7以上版本防火墙关闭失败的问题
  17. “我没干过华为OD的岗位,但它是外包,我就要怼”,什么心态?
  18. windows sevrer2012 dns服务器安装配置
  19. 注册电子邮箱帐号优点
  20. windows 10 build 10074 内部预览版 连不上windows update

热门文章

  1. eureka需要替换吗_iOS第三方库Eureka实现定制动画详解(二):万变不离其宗-Row组件...
  2. django model filter_Django框架使用流程(四)
  3. android 点击事件消费,Android View事件分发和消费源码简单理解
  4. qt 5.9 mysql 5.7_Qt 5.9.1 连 MYSQL 5.7数据库
  5. Java项目:在线水果商城系统(java+JSP+Spring+SpringMVC +MyBatis+html+mysql)
  6. 路由器运行python脚本_写个Python脚本来登录小米路由器
  7. javascript-对混合字母/数字数组进行排序
  8. 腾讯云 短信服务 【学习记录 】
  9. CSS之定位(绝对定位)
  10. 小程序json字符串转 json对象 { name :你好} 转成 { name :你好}