jvm打破砂锅问到底- 为什么要标记或记录跨代引用

  1. 为什么要标记或记录跨代引用.
    ygc时, 直接把老年代引用的新生代对象(可能是对象区域)记录下来当做根, 这其实就是依据第二假说和第三假说, 强者恒强, 跨代引用少(存在互相引用关系的两个对象,是应该倾
    向于同时生存或者同时消亡的).

拿ygc老年代跨代引用对象当做根, 首先就免去了直接直接扫描老年代, 因为要遍历标记哪个新生代的对象存活, 必须从根开始找, 那假如新对象是通过老对象关联着根的, 这种情况是根可达. 这意味着要访问完所有老年代对象以及他的引用关系, 才能枚举刚才的根可达情况. 这显然很耗时, 这就是在fullgc遍历. 因此记录跨代引用就是为了避免这种情况. 造成的好处就是不用罗列根可达对象们的时候, 只用在新生代区域进行就行了, 不用管老年代对象, 免去其判断. 将这判断交给跨代引用的维护. (空间换时间), 这样ygc停顿时间是较短的

(是以下两条的讨论, 第一:弱分代假说: 弱者居多, 弱者就是指朝生夕死,

第二: 强分代假说: 强者恒强, 一个对象如果能持久一段gc次数而不消亡, 他突然消亡的可能性就很小, 或者说越难以消亡)

相关推荐
4311媒体网5 小时前
C语言操作符全解析 C语言操作符详解
java·c语言·jvm
猫头虎15 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
wgslucky15 小时前
jdk17 配置jvm参数中gc的日志及控制日志数量和大小
jvm·gc·-xlog
痴儿哈哈20 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python
野犬寒鸦1 天前
从零起步学习并发编程 || 第七章:ThreadLocal深层解析及常见问题解决方案
java·服务器·开发语言·jvm·后端·学习
闻哥1 天前
Kafka高吞吐量核心揭秘:四大技术架构深度解析
java·jvm·面试·kafka·rabbitmq·springboot
星辰_mya1 天前
Elasticsearch线上问题之慢查询
java·开发语言·jvm
蓝帆傲亦1 天前
代码革命!我用Claude Code 3个月完成1年工作量,这些实战经验全给你
jvm·数据库·oracle
Codiggerworld2 天前
JVM内存模型——你的对象住在哪里?
jvm
马猴烧酒.2 天前
【面试八股|JVM虚拟机】JVM虚拟机常考面试题详解
jvm·面试·职场和发展