关于finalize机制和引用、引用队列的一些结论
来源:互联网 发布:nginx rewrite https 编辑:程序博客网 时间:2024/05/18 03:12
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机制和引用、引用队列的一些结论
- 文章汇总:关于java的finalize,引用和引用队列,自动释放系统外部资源的一些文章
- 关于Java值传递和引用传递的三点结论
- 关于引用的一些理解
- 关于数组的引用和引用数组
- c++关于引用和const的一些问题
- 关于树或二叉树的一些定理和结论
- 关于质数的一些结论和欧拉定理
- php关于变量的引用机制
- php关于变量的引用机制
- 弱引用、虚引用、finalize实践,及它们的顺序
- 关于指针引用的一些认识
- 关于C++引用的一些分析
- c++ 关于引用&的一些知识
- 关于C++引用的一些注意点
- 关于C++引用的一些注意点
- 关于引用类型转化的一些东西
- Java 关于强引用,软引用,弱引用和虚引用的区别与用法
- 联想昭阳E46A不能上网
- 用 WEKA 进行数据挖掘,第 1 部分: 简介和回归
- 分享WindowsPhone8系统中缩放图片控件的实现
- 选择目录对话框,选择文件对话框
- 学习使用apache comments io包中的IOUtils中的方法
- 关于finalize机制和引用、引用队列的一些结论
- POJO类以及映射配置文件
- 动态代理
- C++软件开发第三方库大全
- 用递归实现链表的创建
- 广搜入门,poj3278
- LoardRunner集合点
- Linux入门:VIM
- 人非圣贤孰能无过丶...