21 | 分代算法:基于生命周期的内存管理
Mark-Sweep 算法
- 深入了解
- 翻译
- 解释
- 总结
分代算法是一种内存管理方法,通过将堆空间划分为年轻代和老年代,并使用不同的垃圾回收算法管理对象,以提高垃圾回收效率。文章首先介绍了传统的Mark-Sweep算法,由Mark和Sweep两个阶段组成,用于标记活跃对象和回收非活跃对象。随后,文章详细阐述了分代垃圾回收算法的动机和原理,以及对象的晋升过程。为了解决跨代引用的问题,引入了记录集和写屏障的概念,用于维护跨代引用和提升效率。另外,介绍了Card table的实现方式,用于优化写屏障的效率。最后,提及了Hotspot中分代式垃圾回收的典型算法:并发标记清除算法(CMS)。整体而言,本文深入浅出地介绍了分代垃圾回收算法的原理和操作过程,为读者提供了全面的技术视角。文章还详细介绍了并发标记算法的实现,包括并发标记的阶段和解决漏标问题的方案。在Hotspot中,CMS的实现由多个阶段组成,包括初始标记、并发标记、重标记、并发清除和最终清理等。并发标记阶段是CMS中最复杂的部分,文章对其实现进行了详细解析,包括并发标记的过程、解决并发标记中业务线程修改对象引用关系的方法,以及重标记阶段的作用。整体而言,本文内容丰富,深入剖析了分代垃圾回收算法及其在Hotspot中的实现细节,对读者具有较高的参考价值。
《编程高手必学的内存知识》,新⼈⾸单¥59
全部留言(10)
- 最新
- 精选
- DZ老师,请教下,Card table维护的是老年代到年轻代的跨代引用,那年轻代到老年代的跨代引用需要维护么?还是直接遍历?
作者回复: 不需要。是这样的:年轻代gc会独立做,老年代gc发生的时候就全部遍历一下。这是因为年轻代会更频繁。老年代则没有那么频繁。
2022-02-135 - 费城的二鹏思考题 用广度优先搜索,可以减少维护一个内存空间。
作者回复: 其实深度和广度差不多,因为这次没有额外的空间可以复用了。深度用栈,广度用队列,都少不了的。cms采用了一种结合的做法,我后面会在直播或者其他文章里讲一下。当然不知道也没关系。
2021-12-15 - 费城的二鹏老师有时间可以讲一下 ZGC 种染色指针的具体原理以及扫描过程的逻辑吗?
编辑回复: 小编有时间,你敢不敢听~~哈哈,开个玩笑,关注我们的23讲吧~ZGC马上就来
2021-12-153 - 费城的二鹏老师有时间可以详细讲下 OopMap 吗?他的结构与生成原理。
作者回复: 这个涉及到编译器和gc之间的相互依赖。我们这个专栏怕是写不了了。以后有机会写编译器优化再说吧。
2021-12-153 - CoderJiA512bytes 映射为一个 byte,那如何记录引用关系呐2022-02-101
- Geek_46db19没能够理解 card table 跨代维护的作用。 card table,记录着 old 到 young 到引用中的 old 对象。主要用在 young gc 中,以减少 young gc 对于 old 对象遍历的次数。 我的理解,card table主要还是用在 young gc,那为什么在 old gc 还会出现,并且作为标记灰对象的载体。还是说有新的一个 card table 来标记灰对象。2023-08-15归属地:北京
- fly2best这是我见过的讲的最清楚的CMS的文章了2023-02-16归属地:浙江
- Darrencard table 怎么置位后,当年轻代垃圾回收的时候,怎么找到从老年代指向年轻代的饮用呀?2022-02-121
- 喵吉豆豆怎么都没有人留言了,我也没想到更省空间的方法,还等着看老师的回复呢/(ㄒoㄒ)/~~老师的课程真好,虽然我不做java,是个写C的,但是对我这样时常需要自己造轮子的学到了很多轮子设计图纸,可以自己裁裁剪剪用在自己的项目里,最重要的是那个思路,感谢!2022-01-29
- sc请问老师, 1. Remember Set 与 Card table 的关系,是因为 Remember Set 效率较差,复杂,所以最终在 hotspot 中使用了 Card table 这种方案吗;网上有些博客说 Remember Set 与 Card table 的关系是接口与实现的关系,老师怎么看呢 2. Card table 中维护的是从老年代到年轻代的跨代引用,请问老师,那么当进行年轻代的 Scavenge gc 时,从根对象出发进行深度遍历的时候,如果遇到的对象是老年代的对象,这个遍历就会停止吗,然后从对应的 Card table 中找这些存在的从老年代到年轻代的引用,将这些被跨代引用的年轻代的对象复制过去吗 3. 在 Java 对象的对象头中存在 age,用来判断是否要晋升到老年代;请问老师,一个对象现在处于年轻代还是老年代,是如果判断的呢(网上没有找到答案),是在对象头有其他信息吗,还是直接根据对象所处的内存位置判断呢?2021-12-155