JVM-如何判断对象存活与否与CMS收集器和G1收集器的区别

JVM如何判断对象存活?

1、计数器

2、可达性分析   (很多主流语言采用这种方法来判断对象是否存活)

 

计数器:每当有一个地方引用该对象时,计数器 +1;引用失效则 -1;

优点:实现简单,判定效率高。

缺点:难解决对象间的相互循环引用问题。

 

可达性分析:通过GC Roots的对象作作为起点,从这些起点向下去搜索,所走过的路径叫做引用链,当一个对象到GC Roots没有任何引用链连接时,则证明此对象不可达。

  简单理解:1、对象A中引用了对象B,那么就称A到B可达。

       2、经历两次标记和筛选,第一次的标记和筛选并不能直接断定对象的死亡。等第二次确认没有可达的对象的时候才会真正确定。

  可作为 GC Root 的对象有
      1.Java虚拟机栈(栈帧的本地变量表)中引用的对象
      2.本地方法栈 中 JNI引用对象
      3.方法区 中常量、类静态属性引用的对象

 

CMS收集器和G1收集器的区别

  CMS收集器:一款以获取最短回收停顿时间为目标的收集器,是基于“标记-清除”算法实现的,分为4个步骤:初始标记、并发标记、重新标记、并发清除。
  G1收集器:面向服务端应用的垃圾收集器,过程:初始标记;并发标记;最终标记;筛选回收。

 

 CMS特点并发,低停顿

   缺点对CPU非常敏感,无法处理浮动垃圾,内存碎片过多时,会产生full gc

        (什么是浮动垃圾:并发清理阶段用户线程还在运行,这段时间就可能产生新的垃圾,新的垃圾在此次GC无法清除,只能等到下次清理)

  G1特点: 是一款面向服务端应用的垃圾收集器,并行于并发,分代收集,空间整合,可预测的停顿   

        (空间整合:由于G1使用了独立区域(Region)概念,G1从整体来看是基于“标记-整理”算法实现收集,从局部(两个Region)上来看是基于“复制”算法实现的,但无论如何,这两种算法都意味着G1运作期间不会产生内存空间碎片。

           可预测的停顿:这是G1相对于CMS的另一大优势,降低停顿时间是G1和CMS共同的关注点,但G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用这明确指定一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒)

 

   缺点:我暂时没在网上找到相关资料

 

转载于:https://www.cnblogs.com/yswyzh/p/10144875.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值