首页 > 代码库 > Java 编程思想 第五章 ----初始化与清理(1)
Java 编程思想 第五章 ----初始化与清理(1)
从今天开始每天一小时的java 编程思想的阅读和编码,其实就是把书上的代码抄下来。
- 5.5 清理:终结处理和垃圾回收
初始化和清理工作同等重要,但是清理工作却被常常忘记,但是在使用对象之后,对对象弃之不顾的做法并不是很安全。Java有自己的垃圾回收器负责回收无用的对象占据的内存资源。但也有特殊情况:假定你的内存区域不是用new获得的,这是无法用垃圾回收器释放所以java中允许在类中定义一个名为 finalize()的方法。
工作原理:
一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时才会真正的回收对象占用的内存。(与C++中的析构函数不同,C++中new创建,delete销毁,如果忘记,就会发生内存泄漏,而Java中的对象并不是都是用垃圾回收的)以下是三个要点:
- 对象可能不被垃圾回收
- 垃圾回收并不等于析构
- 垃圾回收只与内存相关
Java中虽然有垃圾回收,但是并不能完全代替c++中的析构函数的功能。
示例:
1 //:initialization /TerminationCondition.java 2 //Using finalize() to detect an object that 3 //hasn‘t been properly cleaned up 4 class Book{ 5 boolean checkedOut = false; 6 Book(boolean checkOut) { 7 checkedOut = checkOut; 8 } 9 void checkIn(){10 checkedOut = false;11 }12 protected void finalize() {13 if(checkedOut)14 System.out.print("Error:Checked out");15 //Normally, you‘ll also do this:16 //super.finalize();//call the base-class version17 }18 }19 20 public class Rock{21 public static void main(String []args) {22 Book novle = new Book(true);23 novle.checkIn();24 new Book(true);25 System.gc();26 27 }28 }
output:
Error: checked out
注意:System.gc()用于强制进行终结动作
*
Java 编程思想 第五章 ----初始化与清理(1)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。