JVM中那些类可以作为GCRoot对象

一:jvm内存回收算法一般有两种

        1、引用计数法:如果有地方引用该对象,该对象的引用计数就+1,如果引用失效的话就减一。计数器为0的对象不可以被使用。

        2、可达性分析法:如果我们将一些GC Roots对象作为起始点,从这些节点向下搜索,搜索到的路径为引用链,如果有一些对象没有任何引用链相连,那么这个对象对于GC Roots是不可达的,即使它们之间可能相互产生关联,所以将其判定为可回收对象

试想一下,如果有两个对象互相引用,比如objA.instance = objB, objB.instance = objB,这个时候两个对象都不能被访问,但是互相引用导致引用计数不为0,这不就无法判定为死亡了吗?我们如果是GC,能允许这种长生不死的存在吗?肯定不。所以引用计数法并没有被采用在目前的JVM垃圾回收器中。所以jvm使用的是可达性分析法算法

二:什么是可达性分析算法呢?

        可达性分析算法:通过一系列的名为“GC Root”的对象作为起点,从这些节点向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Root没有任何引用链相连时(或者该对象不是GCRoot对象时),则认为该对象不可达,后面该对象将会被垃圾收集器回收其所占的内存。

三:在java语言中,什么对象可作为GCRoot的对象?

(可达性分析算法中根节点有哪些?)

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

        b.方法区中的类静态属性引用的对象。 (一般指被static修饰的对象,加载类的时候就加载到内存中。)

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

        d.本地方法栈中的JNI(native方法)引用的对象。

四:怎么理解上面4中类型的GCroot对象呢?

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

  b.方法区中的类静态属性引用的对象(一般指被static修饰的对象,加载类的时候就加载到内存中。)

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

 d.本地方法栈中的JNI(native方法)引用的对象

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的IT蜗牛

更美口味,打赏人生

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值