《java编程思想》学习笔记二 java的finalize内存回收

来源:互联网 发布:苹果手机群发短信软件 编辑:程序博客网 时间:2024/06/17 00:57

一旦垃圾回收器准备释放内存资源的时候首先调用finalize()方法,并在下一次动作真正发生之前才会真正回收对象所占内存,finalize()做的事一些清理工作。有以下特点:

1 垃圾回收只与内存有关

2 对象可能不被垃圾回收

3 垃圾回收不是析构函数

4, 只要程序没有濒临内存耗尽的那一刻,对象占用的资源总得不到释放.直到程序结束后才彻底释放资源


finalize()方法的通用格式如下:

protected void finalize( )
{
// finalization code here
}


finalize() 是一个用于释放非 Java 资源的方法。但是,JVM 有很大的可能不调用对象的finalize() 方法.Java 1.1 通过提供一个System.runFinalizersOnExit() 方法部分地解决了这个问题。不象System.gc() 方法那样,System.runFinalizersOnExit() 方法并不立即试图启动垃圾回收器。而是当应用程序或 Applet 退出时,它调用每个对象的finalize() 方法。通过调用System.runFinalizersOnExit() 方法强制垃圾回收器清除所有独立对象的内存,当清除代码执行时可能会引起明显的延迟。


垃圾回收器工作方式:

停止----复制   先暂停运行程序,吧需要的对象复制搬迁出来,然后删除掉之前的内存空间,这样可以避免碎片的出现,复制出来的对象可以放在一个连续的内存空间中

标记----清扫   从堆栈和静态存储区出发,遍历所有引用,找出所有存活的对象,所有标记的对象不被回收。  这样有个缺点就是回收过后的内存空间是不连续的,如果想得到连续的对象就得要重新整理了





0 0
原创粉丝点击