java-jvm之垃圾回收算法

29 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情

java-jvm之垃圾回收算法

可回收对象定义

引用计数法

一个对象没有任何与之关联的引用,被引用计数为零。

可达性分析

通过一系列“GC Roots”对象作为起点搜索,如果没有和一个对象之间有可达路径,则该对象是不可达的。不可达对象被标记两次及以上即可被认为是可回收对象。

标记清除算法

在标记阶段,标记所有需要回收的对象;清除阶段则回收被标记的对象所占用的内存。

复制算法

按内存容量将内存划分为等大小的两块。每次只使用其中的一块,当这一块内存满后将尚存活的对象复制到另一块内存中,然后清除掉已使用的内存。

标记整理算法

标记阶段,标记所有可回收的对象;然后将存活对象移向内存的一端,然后清除端边界外的对象。

分代收集算法

根据对象存活的不同生命周期将内存划分为不同的域,一般划分为老年代和新生代。

新生代与复制算法

一般将新生代划分为一块较大的Eden空间和两个较小的Survivor空间(From Space,To Space),每次只使用Eden和其中一块Survivor空间,进行回收对象时,将两个空间存活的对象复制到另一块Survivor空间中。

老年代与标记复制算法

如果To Space无法满足存储某个对象时,则将对象存在老年代中。当进行垃圾回收能够存活下来的对象将被标记年龄+1,当对象的年龄达到15后直接被移到老年代中。

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情