一旦垃圾回收器准备释放内存资源的时候首先调用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() 方法强制垃圾回收器清除所有独立对象的内存,当清除代码执行时可能会引起明显的延迟。
垃圾回收器工作方式:
停止----复制 先暂停运行程序,吧需要的对象复制搬迁出来,然后删除掉之前的内存空间,这样可以避免碎片的出现,复制出来的对象可以放在一个连续的内存空间中
标记----清扫 从堆栈和静态存储区出发,遍历所有引用,找出所有存活的对象,所有标记的对象不被回收。 这样有个缺点就是回收过后的内存空间是不连续的,如果想得到连续的对象就得要重新整理了