当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

避免使用终结函数

发表于: 2015-07-16   作者:vahoa.ma   来源:转载   浏览:
摘要: 终结函数(finalizer)通常是不可预测的,常常也是很危险的,一般情况下不是必要的。使用终结函数会导致不稳定的行为、更差的性能,以及带来移植性问题。不要把终结函数当做C++中的析构函数(destructors)的对应物。       我自己总结了一下这一条的综合性结论是这样的: 1)在涉及使用资源,使用完毕后要释放资源的情形下,首先要用一个显示的方

终结函数(finalizer)通常是不可预测的,常常也是很危险的,一般情况下不是必要的。使用终结函数会导致不稳定的行为、更差的性能,以及带来移植性问题。不要把终结函数当做C++中的析构函数(destructors)的对应物。

 

    我自己总结了一下这一条的综合性结论是这样的:

1)在涉及使用资源,使用完毕后要释放资源的情形下,首先要用一个显示的方法(应该是私有的)来释放这些资源;

2)在主方法中通过 try-catch-finally 的结构结合起来,try中写正常操作的代码,catch中处理异常,如写Log等,finally中通过调用1)中的显示的资源释放方法来释放资源(使用finally是因为不论成功还是异常都要释放资源)

3)用终结函数作为“安全网”,防止程序员忘记了2)中的“调用1)中的显示的资源释放方法”。这样迟一点释放资源也总比忘记释放要好;

4)进而用“终结守卫者”来代替3)中的终结函数,这样的好处是,如果这个类被子类继承,而子类的终结函数又忘记调用它的父类的终结函数时,如果父类是用“终结守卫者”来代替“终结函数”的话,就不怕子类遗忘此事了,即使子类的终结函数没有调用,父类的“终结守卫着”也会被执行的。

public class Example{  
   public void doSomething(){  
      try{  
         // 打开资源并使用  
      ......  
      } catch XXXException e {  
         ......  
      } finally {  
         release();  
      }  
   }  
  
   protected void release(){  
      // 释放资源  
    .......  
   }  
  
   private final Object finalizerGuardian = new Object(){  
      protected void finalize() throws Throwable{  
          release();  
      }  
   };  
}  

 

避免使用终结函数

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
前阵子翻了翻候杰老师翻译的那本Win32多线程的书,老书了,很经典。 书里提到,当使用C/C++的时候,
点击打开链接 前阵子翻了翻候杰老师翻译的那本Win32多线程的书,老书了,很经典。 书里提到,当使用
应用kernels来进行非线性分类 非线性分类:是否存在好的features的选择(而不是多项式)--f1,f2,f3...
应用kernels来进行非线性分类 非线性分类:是否存在好的features的选择(而不是多项式)--f1,f2,f3...
前面我们基本了解了垃圾回收和托管堆得情况了,包含垃圾回收期如何回收对象的内存,幸运的是,大多
兄弟对不起了 本来是昨天要上的帖子,拖到了今天。这两天特别感慨青春,或许自己忙碌这么久。知道终
作者:伯乐在线-meituanalibaba 网址:http://blog.jobbole.com/89140/ http://www.cnblogs.com/LBS
【前言】 这篇博客仍然是关于WCF的创建学习。上篇博客中使用的是在服务端的HOST中写入终结点的配置
原文链接 API(Application Programming Interface)提供了对某个问题的抽象,以及客户与解决该问题
1:本地事务DbTransaction和分布式事务TransactionScope的区别: 1.1:System.Data.Common.DbTransa
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号