实例2 - 避免使用finalize()

避免使用finalize()方法

finalize()被设计出来,允许在对象被回收之前,做一些系统资源释放的工作,比如I/O流关闭,网络连接释放等等。

但是finalize()应该避免使用,原因如下:

  • [ ] finalize不保证会被调用,因为是垃圾回收是系统行为,程序不能严格控制垃圾回收的执行,而finalize只在该对象被回收时才会触发。
  • [ ] finalize对性能影响很大 :
    增加了finalize()的对象,创建和销毁明显需要更多的时间
  • [ ] finalize在对象回收时被调用是需要JVM中支持的,不同的JVM对其支持程度不同,可能出现不同JVM上行为不一致的问题
  • [ ]子类中的finalize需要显式地调用super.finalize()才能保证父类对象的finalize()被触发。否则父类的finalize()永远不会被调用。

  • [ ] Runtime.getRuntime().runFinalization();可以建议GC尽量执行该对象的finalize()方法,但是并不保证。另外这个方法己被弃用,因为它有可能使得正在被其他线程操作的对象的finalize方法被调用,从而导致异常或者死锁。

  • [ ] finalize()中如果发生异常,不会有任何日志记录或者提醒。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容