第五章ThinkingInJava
为什么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相关推荐
- 王道考研 计算机网络笔记 第五章:传输层
本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...
- 数字图像处理——第五章 图像复原与重建
数字图像处理--第五章 图像复原与重建 文章目录 数字图像处理--第五章 图像复原与重建 写在前面 1 图像退化/复原过程的模型 2 噪声模型 2.1 高斯噪声 2.2 椒盐噪声 3 仅有噪声的复原- ...
- c语言逐步搜索法求有根区间,[C语言第五章.ppt
[C语言第五章 算法举例 基本思想是,根据提出的问题,列举所有可能的情况,并 用问题中给定的条件检验哪些是需要的,哪些是不需要的. 教学进程 列举与试探 列举法常用于解决"是否存在" ...
- 2018-4-8蚁群算法---包子阳《智能优化算法以及Matlab实现》第五章
资料来源: <智能优化算法以及matlab实现>包子阳 余继周 编著 第五章-----蚁群算法 是一种元启发式优化算法(自己理解:就是作为群体的单位个体也就是元,在里面充当着随机的选择搜 ...
- Linux内核分析——第五章 系统调用
第五章 系统调用 5.1 与内核通信 1.系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: (1)为用户空间提供了一种硬件的抽象接口 (2)系统调用保证了系统的稳定和安全 ( ...
- 2021 线性代数 第五章 习题课
第5章 实对称矩阵与二次型 5.1 实对称矩阵的对角化(基础部分) 5.1 实对称矩阵的对角化(提高部分) 5.2 二次型及标准形(基础部分) 5.2 二次型及标准形(提高部分) 5.3 正定二次型与 ...
- java十五章_java:第十五章
第十五章 字符串1.字符串(String)的定义 String str="内容"; String str=new String(); //内容为null String str=ne ...
- 国内第一本律师撰写的海关法律专业书籍-《企业如何应对海关行政处罚》-第五章...
第五章 当企业遭遇申报不实 被海关认定"申报不实"往往是困扰企业尤其是海关信誉良好企业的一块心病,企业这种不知不觉状态下的违规是何原因造成?企业如何规避? 第一节 遭遇申报不实,企 ...
- 第五章 RNA-seq分析
第五章 RNA-seq分析 主要为RNA-seq相关知识,部分内容作笔记自查使用.如有错误或遗漏还请海涵,可评论或邮箱联系. 最后修改时间:2020-09-01 16:11:38 星期二 转录组研究方 ...
最新文章
- window.location.reload() 刷新页面时,如何不弹出提示框
- 买房猛于虎《功夫熊猫无家可归》
- Movavi PDF Editor 3中文版
- 用c语言构建二叉树(重点)
- 面试题:InnoDB 中一棵 B+ 树能存多少行数据?【面试不翻车,翻车就跑路】
- linux search用法,在Linux中使用ldapsearch只返回一个值
- Html5学习进阶一 视频和音频
- 苹果mac最好用的SVN客户端:Cornerstone 4 (SVN管理工具)
- 分享12306秒票杀手锏源码
- Interactive Data Display如何显示菜单?
- android andbase,andbase
- 视频联网云平台EasyCVR集成海康EHome协议系列——配置及协议介绍
- 什么是Podfile呢?送给你来自官网的介绍
- 杨咩咩的编程求学之路之开篇
- 5种经典的数据分析思维和方法
- 解决centOS7以上版本防火墙关闭失败的问题
- “我没干过华为OD的岗位,但它是外包,我就要怼”,什么心态?
- windows sevrer2012 dns服务器安装配置
- 注册电子邮箱帐号优点
- windows 10 build 10074 内部预览版 连不上windows update
热门文章
- eureka需要替换吗_iOS第三方库Eureka实现定制动画详解(二):万变不离其宗-Row组件...
- django model filter_Django框架使用流程(四)
- android 点击事件消费,Android View事件分发和消费源码简单理解
- qt 5.9 mysql 5.7_Qt 5.9.1 连 MYSQL 5.7数据库
- Java项目:在线水果商城系统(java+JSP+Spring+SpringMVC +MyBatis+html+mysql)
- 路由器运行python脚本_写个Python脚本来登录小米路由器
- javascript-对混合字母/数字数组进行排序
- 腾讯云 短信服务 【学习记录 】
- CSS之定位(绝对定位)
- 小程序json字符串转 json对象 { name :你好} 转成 { name :你好}