GC如何判断对象可以被回收

引用计数法(已淘汰 )

  每个对象有一个引用属性,新增一个引用就加一,引用释放就减一;计数为0就可以回收。

   但是这种方式无法解决循环引用的问题,A引用B,同时B引用A。

可达性分析算法(根引用)

   1.从GCroot开始向下搜索,搜索走过的路径称为引用链,如果这个对象到GCroot没有任何引用链相连时,证明对象不可用,可以回收。

   2.GCroot包含哪些?

    a.虚拟机栈中引用的对象

    b.方法区中静态属性应用的对象

    c.方法去中常量引用的对象

    d.本地方法栈中引用的对象

  不同的引用类型回收机制也是不一样的

    1.强引用:new出来的对象都是强引用,不回收,哪怕OOM。String str = "abc"也是

    2.软引用:当JVM对空间不足时,就会回收。通过java.lang.ref.SoftReference使用软引用

    3.弱引用:在GC时就会回收。通过WeakReference来使用弱引用

    4.虚引用:随时可以被回收,通过PhantomReference来使用虚引用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值