• Java中finalize()方法的作用


    finalize方法是Object提供的的实例方法,使用规则如下:

    1. 当对象不再被任何对象引用时,GC会调用该对象的finalize()方法
    2. finalize()是Object的方法,子类可以覆盖这个方法来做一些系统资源的释放或者数据的清理
    3. 可以在finalize()让这个对象再次被引用,避免被GC回收;但是最常用的目的还是做cleanup
    4. Java不保证这个finalize()一定被执行;但是保证调用finalize的线程没有持有任何user-visible同步锁。
    5. 在finalize里面抛出的异常会被忽略,同时方法终止。
    6. 当finalize被调用之后,JVM会再一次检测这个对象是否能被存活的线程访问得到,如果不是,则清除该对象。也就是finalize只能被调用一次;也就是说,覆盖了finalize方法的对象需要经过两个GC周期才能被清除。

    例子:

    //FileInputStream.java
    protected void finalize() throws IOException {
            if (guard != null) {
                guard.warnIfOpen();
            }
    
            if ((fd != null) &&  (fd != FileDescriptor.in)) {
                close();
            }
        }
    

    在finalize里面做资源释放的操作。

    有一种观点是,如果使用finalize仅仅是为了观察对象被回收,这时候我们可以用虚引用(PhantomReference)来代替,虚引用无法通过get获得对象,而且创建虚引用必须要有关联队列,当对象被回收之后,虚引用会被放入关联队列中,所以我们可以通过观察关联队列来判断对象是否被回收。
    在看终结器引用时讲到这里,感觉有点不清楚,故特意查文章再巩固确认。
    原文链接:finalize()方法的作用

    艾欧尼亚,昂扬不灭,为了更美好的明天而战(#^.^#)
  • 相关阅读:
    WCF使用net.tcp寄宿到IIS中
    (转)Dubbo 简单Dome搭建
    Linux压缩解压
    Linux关闭开启防火墙命令
    简单登录(jsp+servlet)
    UVa 10285 Longest Run on a Snowboard [DP]
    UVa 1218 Perfect Service [DFS+DP]
    第三届ACM山东省赛 Pick apples [贪心+动规]
    ZOJ 3326
    HDU 1029
  • 原文地址:https://www.cnblogs.com/lovelywcc/p/14063279.html
Copyright © 2020-2023  润新知