4.6.8 对象析构与finalize方法
2012-11-17 16:35
148 查看
有些面向对象的程序设计语言,特别是C++,有显式的析构器方法,其中放置一些当对象不再使用时需要执行的清理代码。在析构器中,最常见的操作是回收分配给对象的存储空间。由于Java有自动的垃圾回收器,不需要人工回收内存,所以Java不支持析构器。
当然,某些对象使用了内存之外的其他资源,例如,文件或使用了系统资源的另一个对象的句柄。在这种情况下,当资源不再需要时,将其回收和再利用将显得十分重要。
可以为任何一个类添加finalize方法。finalize方法将在垃圾回收器清除对象之前调用。在实际中,不要依赖于使用finalize方法回收任何短缺的资源,这是因为很难知道这个方法什么时候才能够调用。
注释:有个名为System.runFinlizersOnExit(true)的方法能够确保finalizer方法在Java关闭前被调用。不过,这个方法并不安全,也不鼓励大家使用。有一种代替的方法是使用方法Runtime.addShutdownHook添加“关闭钩”(shutdown hook),详细内容请参看API文档。
如果某个资源需要在使用完毕后立刻被关闭,那么就需要由人工来管理。可以应用一个类似dispose或close的方法完成相应的清理操作。特别需要说明,如果一个类使用了这样的方法,当对象不再被使用时一定要调用它。
当然,某些对象使用了内存之外的其他资源,例如,文件或使用了系统资源的另一个对象的句柄。在这种情况下,当资源不再需要时,将其回收和再利用将显得十分重要。
可以为任何一个类添加finalize方法。finalize方法将在垃圾回收器清除对象之前调用。在实际中,不要依赖于使用finalize方法回收任何短缺的资源,这是因为很难知道这个方法什么时候才能够调用。
注释:有个名为System.runFinlizersOnExit(true)的方法能够确保finalizer方法在Java关闭前被调用。不过,这个方法并不安全,也不鼓励大家使用。有一种代替的方法是使用方法Runtime.addShutdownHook添加“关闭钩”(shutdown hook),详细内容请参看API文档。
如果某个资源需要在使用完毕后立刻被关闭,那么就需要由人工来管理。可以应用一个类似dispose或close的方法完成相应的清理操作。特别需要说明,如果一个类使用了这样的方法,当对象不再被使用时一定要调用它。
相关文章推荐
- Java中的对象析构与finalize方法
- JAVA中对象什么时候死亡以及什么时候执行finalize()方法
- 面向对象 析构方法 销毁对象时自动触发
- Java中的析构方法finalize
- 《Advanced .NET Debugging》 读书笔记 Listing 5-4: 具有Finalize方法的简单对象
- 7. 【创建和销毁对象】避免使用终结方法finalize
- php面向对象(一),类,类成员,构造方法,析构方法及对象的销毁
- python面向对象开发3 (内部类-构造-析构)魔术方法)
- 【JAVA优化编程】内存管理之——(3)Java中的析构方法finalize
- 第69讲 php面向对象中的析构方法
- 【Effective Java】Ch2_创建销毁对象:Item7_避免使用finalize方法
- 技巧:多共享动态库中同名对象重复析构问题的解决方法
- 技巧:多共享动态库中同名对象重复析构问题的解决方法
- Java GC机制和对象Finalize方法的一点总结
- Java虚拟机垃圾回收(一) 基础:回收哪些内存/对象 引用计数算法 可达性分析算法 finalize()方法 HotSpot实现分析
- php面向对象基础概念(构造方法和析构方法)
- Java对象销毁和finalize方法
- 面向对象基础 之-定义类,声明,属性,成员方法,传值,构造与析构方法
- Java对象中的finalize()方法使用说明
- JVM——finalize()方法之对象存活最后的机会