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毫秒)

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

最新文章

  1. android 设颜色透明值
  2. c基础回顾
  3. 解析ABP框架中的事务处理和工作单元,ABP事务处理
  4. mongodb sharding配置
  5. AA投资
  6. @Component("userService").@Resource(name="userDao")
  7. java List排序方法 Comparator和Comparable
  8. HDU 4735 Little Wish~ lyrical step~(DLX , 反复覆盖)
  9. 4D(DRG、DLG、DOM、DEM)数据 概念
  10. PHP站内搜索
  11. source is null for getProperty(null, "cpmodel")异常结局
  12. 金融量化分析【day112】:量化平台的使用-第一个策略
  13. day06深浅拷贝,元组,字典,集合
  14. DOS命令 学习笔记
  15. golang string int int64转换
  16. css垂直居中怎么设置?文字上下居中和图片垂直居中
  17. python装饰器概念与应用
  18. pthon 批量压缩当前目录,子目录下图片
  19. 《DSP using MATLAB》Problem 3.20
  20. Oracle查看及修改Oracle最大连接数

热门文章

  1. Yii2 设计模式——简单工厂模式
  2. 密码疑云 (3)——详解RSA的加密与解密
  3. ActiveMQ (二)—发布订阅模式
  4. update_engine-DownloadAction(二)
  5. 黄聪:如何正确在Vue框架里使用Swiper
  6. MySQL 5.7版本 sql_mode=only_full_group_by 问题
  7. AngularJS 1.x 思维索引
  8. kong api可视化管理工具konga安装
  9. MySQL data type
  10. elasticsearch 5.0以上不支持consistency 和 quorum