细说finalize()
细说finalize()
finalization机制是对象被销毁前的自定义处理逻辑,当垃圾回收某个对象前,总会调用对象的finalize(),该方法允许子类重写,用于资源释放,比如关闭文件、套接字、数据库连接等。
如果极端情况下不发生GC,finailze()是没有机会被调用的。
虚拟机中的对象有三种状态:可触及的、可复活的、不可触及的,具体判定过程如下:
- 当一个对象到GC Roots没有引用链,就进行第一次标记;
- 如果该对象没有重写finalize()或者调用过finalize()了,那么该对象直接为不可触及类型的;
- 如果对象重写了并且还没执行过finalize(),那么该对象就是可复活的,加入F-Queue队列中。
- GC对F-Queue队列上的对象进行第二次标记,如果对象到GC Roots有引用链了,就直接移出队列,复活该对象。
但是被二次标记过的对象如果再次出现没有被引用的情况,就直接被标记为不可触及了,也就说明:finalize()仅能复活对象一次,且finalize()只能被调用一次。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!