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毫秒)
缺点:我暂时没在网上找到相关资料
最新文章
- android 设颜色透明值
- c基础回顾
- 解析ABP框架中的事务处理和工作单元,ABP事务处理
- mongodb sharding配置
- AA投资
- @Component(";userService";).@Resource(name=";userDao";)
- java List排序方法 Comparator和Comparable
- HDU 4735 Little Wish~ lyrical step~(DLX , 反复覆盖)
- 4D(DRG、DLG、DOM、DEM)数据 概念
- PHP站内搜索
- source is null for getProperty(null, ";cpmodel";)异常结局
- 金融量化分析【day112】:量化平台的使用-第一个策略
- day06深浅拷贝,元组,字典,集合
- DOS命令 学习笔记
- golang string int int64转换
- css垂直居中怎么设置?文字上下居中和图片垂直居中
- python装饰器概念与应用
- pthon 批量压缩当前目录,子目录下图片
- 《DSP using MATLAB》Problem 3.20
- Oracle查看及修改Oracle最大连接数
热门文章
- Yii2 设计模式——简单工厂模式
- 密码疑云 (3)——详解RSA的加密与解密
- ActiveMQ (二)—发布订阅模式
- update_engine-DownloadAction(二)
- 黄聪:如何正确在Vue框架里使用Swiper
- MySQL 5.7版本 sql_mode=only_full_group_by 问题
- AngularJS 1.x 思维索引
- kong api可视化管理工具konga安装
- MySQL data type
- elasticsearch 5.0以上不支持consistency 和 quorum