finalize()方法解密
来源:互联网 发布:mac应用程序卸载不了 编辑:程序博客网 时间:2024/06/06 03:43
java垃圾回收器在回收对象之前,会自动调用此对象的finalize()方法,不需要程序员调用。(但只会被自动调用一次,如果之前被调用过,就不会再次调用)
原理:如果类没有实现finalize()方法,当GC时,如果没有引用指向它,垃圾回收器会直接回收该对象。如果一个类实现了finalize()方法,当创建该类的对象的时候,会多创建一个Finalizer对象,指向刚创建的对象,并把此Finalizer对象加入Finalizer类内部静态链表中,GC时,如果发现对象只被Finalizer对象引用,则将链表中对应Finalizer对象加入到Finalizer内部静态引用队列中(并从链表中删除),FinalizerThread后台线程不断从引用队列中取出Finalizer对象(并从队列中删除,如果没有则等待),执行Finalizer所指向对象的finalize()方法,并把指向对象的引用置为NULL,下次GC时,该对象才被回收。实现finalize()方法的对象被回收,至少需要2次GC(至少:在finalize()方法中实现自救),严重影响性能和内存。 finalize()方法不安全:如果一个对象的finalize()方法死循环,引用队列中的其他对象将永远处于等待状态。
如果finalize()方法抛出异常:FinalizeThread继续执行。执行finalize()方法(被FinalizeThread线程执行)的代码被放入try{}catch(Throwable){空}
阅读全文
0 0
- finalize()方法解密
- finalize()方法
- finalize方法
- finalize方法
- finalize方法
- finalize()方法
- finalize()方法
- finalize() 方法
- finalize方法
- finalize()方法
- 重写 Finalize 方法
- finalize( ) 方法详解
- java中的finalize()方法
- 详解finalize()方法
- java中的finalize()方法
- 详解finalize()方法
- Java finalize方法使用
- finalize方法的说明
- 精雕细琢——全方位解析工厂模式
- shell编程关于程序调试一些注意点
- 肖磊看市:剖析比特币交易所监管背后真相,为何取缔并非最佳策略
- UGUI_Text_Gradient: GradientLeftToRight / GradientTopToBottom
- 基于OMAPL138的linux平台8250快速串口实现--UART+EDMA
- finalize()方法解密
- Android APP中卸载其他APP的三种方法
- BZOJ 1150 数据备份Backup
- 关于Google Earth Engine(GEE)学习笔记搬家说明
- 淘宝分布式文件系统TFS设计
- 【前端知识点】你所不了解的Ajax和Http状态字
- Python的学习(二)
- 如何查看域名解析生效
- angular+做一个日程表,可以添加内容然后可以隐藏显示