zoukankan      html  css  js  c++  java
  • 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毫秒)

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

  • 相关阅读:
    SpringCloud笔记(一)服务注册与发现
    个人备忘录
    ActiveMQ 消息持久化到Mysql数据库
    染色 [组合数 容斥]
    各种图床
    NOIP2012 疫情控制
    网格计数
    找钱 [多重背包 计数]
    序列[势能线段树]
    牛客挑战赛33 B-鸽天的放鸽序列
  • 原文地址:https://www.cnblogs.com/yswyzh/p/10144875.html
Copyright © 2011-2022 走看看