关于finalize机制和引用、引用队列的用法详解

 更新时间:2016年09月01日 10:43:45   投稿:jingxian  
下面小编就为大家带来一篇关于finalize机制和引用、引用队列的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

C++有析构函数这个东西,能够很好地在对象销毁前做一些释放外部资源的工作,但是java没有。Object.finalize()提供了与析构函数类似的机制,但是它不安全、会导致严重的内存消耗和性能降低,应该避免使用。best practice是:像java类库的IO流、数据库连接、socket一样,提供显示的资源释放接口,程序员使用完这些资源后,必须要显示释放。所以可以忘记Object.finalize()的存在。JVM启动的时候,会创建一个Finalizer线程来支持finalize方法的执行。

关于引用和引用队列,java提供了4种引用类型,在垃圾回收的时候,都有自己各自的独特表现。ReferenceQueue是用来配合引用工作的,没有ReferenceQueue一样可以运行。创建引用的时候可以指定关联的队列,当GC释放对象内存的时候,会将引用加入到引用队列,这相当于是一种通知机制。当关联的引用队列中有数据的时候,意味着引用指向的堆内存中的对象被回收。通过这种方式,JVM允许我们在对象被销毁后,做一些我们自己想做的事情。JVM提供了一个ReferenceHandler线程,将引用加入到注册的引用队列中。

finalze机制是先执行Object.finalize()中的逻辑,后销毁堆中的对象;引用和队列机制,先销毁对象,后执行我们自己的逻辑。可以看到:使用引用和队列机制效率更高,因为垃圾对象释放的速度更快。如果是监控对象的销毁,那么最适合的是幽灵引用,如sun.misc.Cleaner就是使用幽灵引用,达到监控对象销毁的目的,NIO中使用的就是这个。

以上这篇关于finalize机制和引用、引用队列的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C#实现windows form倒计时的方法

    C#实现windows form倒计时的方法

    这篇文章主要介绍了C#实现windows form倒计时的方法,涉及C#桌面程序设计中时间操作的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • wpf将表中数据显示到datagrid示例

    wpf将表中数据显示到datagrid示例

    这篇文章主要介绍了wpf将表中数据显示到datagrid示例,需要的朋友可以参考下
    2014-02-02
  • C#使用Dapper存取数据库详解

    C#使用Dapper存取数据库详解

    Dapper是的一个开源对象关系映射(ORM)库.NET和.NET核心应用程序,本文将介绍C#如何使用Dapper操作数据库,感兴趣的小伙伴可以了解一下
    2024-12-12
  • C#调用Python脚本的简单示例

    C#调用Python脚本的简单示例

    这篇文章主要为大家详细介绍了C#调用Python脚本的简单示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 深入理解C♯ 7.0中的Tuple特性

    深入理解C♯ 7.0中的Tuple特性

    这篇文章主要介绍了C#7中Tuple特性的相关资料,文中通过示例代码介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友可以们下面来一起学习学习吧。
    2017-03-03
  • C#过滤DataTable中空数据和重复数据的示例代码

    C#过滤DataTable中空数据和重复数据的示例代码

    这篇文章主要给大家介绍了关于C#过滤DataTable中空数据和重复数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 使用C#发送带附件的电子邮件的方法的代码示例分析

    使用C#发送带附件的电子邮件的方法的代码示例分析

    这篇文章主要介绍了使用C#发送带附件的电子邮件的方法的代码示例分析,文中还提到了利用163的SMTP服务器发邮件的方法,需要的朋友可以参考下
    2016-02-02
  • c# 数据库的 sql 参数封装类的编写

    c# 数据库的 sql 参数封装类的编写

    c# 数据库的 sql 参数封装类的编写...
    2007-12-12
  • C#程序中类数量对程序启动的影响详解

    C#程序中类数量对程序启动的影响详解

    这篇文章主要给大家介绍了关于C#程序中类数量对程序启动的影响的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • WPF实现可视化扫码器的示例代码

    WPF实现可视化扫码器的示例代码

    AForge.NET 是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,模糊系统,机器人控制等领域。本文就将用它编写一个可视化扫码器,感兴趣的可以了解一下
    2022-11-11

最新评论