文章目录
垃圾收集算法

分代收集理论
当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。
比如在新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。注意,“标记-清除”或“标记-整理”算法会比复制算法慢10倍以上。
标记-复制算法
为了解决效率问题,“复制”收集算法出现了。它可以将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存使用完后,就将还存活的对象复制到另一块去,然后再把使用的空间一次清理掉。这样就使每次的内存回收都是对内存区间的一半进行回收。

本文深入探讨了Java垃圾收集器中的ParNew和CMS(Concurrent Mark Sweep)收集器,重点介绍了分代收集理论和三色标记算法。ParNew是新生代的并发收集器,与CMS配合使用,而CMS关注的是最短停顿时间。文章详细解析了CMS的运作过程和相关参数,并讨论了CMS的优缺点,包括可能出现的浮动垃圾和碎片问题。此外,还提到了写屏障和读屏障在解决并发标记过程中的漏标问题中的作用。
订阅专栏 解锁全文
1281

被折叠的 条评论
为什么被折叠?



