微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java如何判断一个对象是否死去

简单直观的一个方法是:对一个对象添加引用计数器。每当有地方引用它时,计数器的值加 1;当引用失效时,计数器de的值减 1.而当计数器的值为 0 时这个对象就不会再被使用,判断为已死。但这种方法有些情况会不准确:比如当对象 A 中有一个字段指向了对象 B,而对象 B 中 也有一个字段指向了对象 A,而事实上他们俩都不再使用,但计数器的值永远都不可能为 0,也就不会被回收,然后就发生了内存泄露。   正确的方法是:可达性分析. 所有生成的对象都是一个为"GCRoots"的根的子树。从 GC Roots 开始向下搜索搜索所经过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链可以到达时,就称这个对象是不可达的或者是不可引用的,也就是已经死去的对象,可以被 GC 回收了。那哪些可以作为gc root呢,有栈中的本地变量,方法区中的静态变量,本地方法栈中的变量,正在运行中的线程,它们有一个特性,就是它只会引用其他对象,而不会被其他对象引用。   本文转自:https://blog.csdn.net/qq_59614812/article/details/122901619

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐