细说finalize()

细说finalize()

finalization机制是对象被销毁前的自定义处理逻辑,当垃圾回收某个对象前,总会调用对象的finalize(),该方法允许子类重写,用于资源释放,比如关闭文件、套接字、数据库连接等。

如果极端情况下不发生GC,finailze()是没有机会被调用的。

虚拟机中的对象有三种状态:可触及的、可复活的、不可触及的,具体判定过程如下:

  • 当一个对象到GC Roots没有引用链,就进行第一次标记
  • 如果该对象没有重写finalize()或者调用过finalize()了,那么该对象直接为不可触及类型的;
  • 如果对象重写了并且还没执行过finalize(),那么该对象就是可复活的,加入F-Queue队列中。
  • GC对F-Queue队列上的对象进行第二次标记,如果对象到GC Roots有引用链了,就直接移出队列,复活该对象。

但是被二次标记过的对象如果再次出现没有被引用的情况,就直接被标记为不可触及了,也就说明:finalize()仅能复活对象一次,且finalize()只能被调用一次

posted @   知小  阅读(94)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示