前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试题22:什么是可触及性?finalize()的作用是什么?

面试题22:什么是可触及性?finalize()的作用是什么?

作者头像
爪哇缪斯
发布2023-05-09 21:37:20
1610
发布2023-05-09 21:37:20
举报
文章被收录于专栏:爪哇缪斯爪哇缪斯

什么叫可触及性,就是GC时,是根据它来确定对象是否可被回收的。也就是说,从根节点开始是否可以访问到某个对象,也说明这个对象是否被使用。分为3种状态:

  • 可触及:从根节点开始,可以到达某个对象。
  • 可复活:对象引用被释放,但是可能在finalize()函数中被初始化复活。
  • 不可触及:由于finalize()只会执行一次,所以,错过这一次复活机会的对象,则为不可触及状态。

看下面例子:DieAliveObject.java

【补充知识点】

  • Java9中finalize方法为什么被废弃。
  • 因为finalize()函数有可能发生引用外泄,在无意中复活对象
  • 由于finalize()函数是被系统调用的,调用时间是不明确的,因此不是一个好的资源释放方案,推荐在try-catch-finally语句中进行资源的释放。
  • java.lang.ref.Cleaner和java.lang.ref.PhantomReference提供更灵活和有效的方式,在对象无法再访问时释放资源。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爪哇缪斯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档