finalize方法的使用
2016-03-05 16:02
176 查看
gc只负责回收堆内存中的对象,不会回收任何物理资源(例如数据库连接和网络IO等);程序无法精确控制垃圾回收,就算调用了System.gc()也一样只是通知程序可以进行垃圾回收,但是日期还是不确定的,只是会尽快回收垃圾,垃圾回收之前一般会调用finalize方法。对象一般有三种状态,可达,可恢复,不可达。可达不用说了,可恢复即回收对象之前调用finalize方法重新让一个引用变量引用这个对象。则此对象会再次变为可达状态,否则就不可达。注意:永远不要主动调用finalize方法,应该留给垃圾回收机制调用,而且具有不确定性,finalize可以使一个对象重新可达,此方法出现异常时,垃圾回收机制不会报告异常,程序继续执行。方法来自Object,protected
void finalize()throw Throwable。
public class test{
. .private static test t=null;
. .public void info(){System.out.pritln("asd");}
. .public static void main(){
.. .. new test(); System.gc();
.. ..Thread.sleep(2000);//假如没有这一行,调用下面的方法就会异常,因为执行了gc后并未立马进行垃圾回收使得ft重新在finalize里可达,停止两秒后以让程序执行ft=this代码
.. ..//当然上面的sleep可以不用,改为System.runFinalization()有同样效果,即强制垃圾回收机制调用finalize方法以使ft可达。
. .ft.info();
.. ..}
public void finalize(){ft=this;]//重新变成可达对象。
}
void finalize()throw Throwable。
public class test{
. .private static test t=null;
. .public void info(){System.out.pritln("asd");}
. .public static void main(){
.. .. new test(); System.gc();
.. ..Thread.sleep(2000);//假如没有这一行,调用下面的方法就会异常,因为执行了gc后并未立马进行垃圾回收使得ft重新在finalize里可达,停止两秒后以让程序执行ft=this代码
.. ..//当然上面的sleep可以不用,改为System.runFinalization()有同样效果,即强制垃圾回收机制调用finalize方法以使ft可达。
. .ft.info();
.. ..}
public void finalize(){ft=this;]//重新变成可达对象。
}
相关文章推荐
- python GUI实践:做一个满图乱跑的小球
- 网页用户行为的埋点设计
- poj3268Silver Cow Party——最短路变形
- c\c++中的形参与实参
- C++ 函数的嵌套调用
- Java Web学习(四)
- c++ const 关键字
- LeetCode : Reverse Integer [java]
- OpenGL学习——第一次编译OpenGL程序所遇问题
- HBase分布式安装指南
- js 获取范围内的随机数
- 练习1-11
- socker地址API
- iOS - 功能模块 - 幻灯片切换
- 面向对象设计六大原则
- 整理Unity 编辑器的相关知识
- ssh学习笔记
- @property的默认属性
- poj2342 树形dp入门
- Java复习笔记(三)——文档注释