可达性分析算法---你知道哪些对象可以看作GC Roots嘛?

6 篇文章 0 订阅

可达性分析算法

主流的商用程序语言都是使用可达性分析(Reachability Analysis)来判定对象是否存活的

通过一系列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。

可达性分析算法——可作为GC Roots的对象

  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象。(方法的局部变量)
  2. 方法区中类静态属性引用的对象。(类的静态变量,使用static关键字)
  3. 方法区中常量引用的对象。(使用static final关键字修饰的常量)
  4. 本地方法栈中JNI(即一般说的Native方法)引用的对象。

引用

判定对象是否存活都与“引用”有关。

引用分类

强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak
Reference)、虚引用(Phantom Reference)4种,这4种引用强度依次逐渐减弱。

引用分类——强引用

只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。

引用分类——软引用

用来描述一些还有用但并非必需的对象。

对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常。提供了SoftReference类来实现软引用。

引用分类——弱引用

用来描述非必需对象的,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。

提供了WeakReference类来实现弱引用。

引用分类——虚引用(幽灵引用、幻影引用)

最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。为一个对象设置虚引用关联的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。

提供了PhantomReference类来实现虚引用。

参考链接:
https://blog.csdn.net/luzhensmart/article/details/81431212

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值