Java 中,方法结束时,对象引用不赋 Null,会导致内存泄露么?

网站建设知识 phpacg 2年前 (2018-04-24) 100次浏览 0个评论

当一个对象到GC Root没有任何援用衔接相连。那么就证明这个对象是不可用的。这时这个对象就被判死缓了。想要真正的对这个对象判死刑,这个对象还至少阅历两次判决。第一次是判别能否有必要对这个对象执行finalize()方法。假设这个以后对象没有掩盖finalize()方法或finalize()方法曾经被调用过了,那么就不会调用finalize()方法,即对象成功的逃脱了一审讯决。假设对象曾经有必要执行finalize()方法,那么这个对象会被放入一个叫做F-Queue的队列中,这也就意味着在一审中这个对象曾经被判死刑了。

在JVM中,会有一个叫做Finalizer的线程去触发finalize()方法。finalize()方法是对象逃脱死刑的最后一次时机,假设在finalize()的进程中成功的与GC Root相连,则对象成功的逃脱死刑。否则对象就会被第二次标志。被第二次标志的对象就会被送上刑场。假设没有免死金牌(与GC Root相连)的话,对象就会被枪决。所以即使你不对对象赋null,JVM也会帮你处置它。

请自行谷歌GC Root

假设想了解的更清楚,请看《深化Java虚拟机第二版》

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址