-
标记-整理算法:
-
标记- 清除:
-
首先标记出所有需要回收的对象 在标记完成后,统一回收掉所有被标记的对象 也可以反过来,标记存活的对象,统一回收所有未被标记的对象。
-
执行效率不稳定
-
内存空间碎片化问题,标记、清除之后会产生大量不连续的内存碎片,
-
-
标记-复制算法:
-
它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。
当这一块的内存用完了,就将还存活着 的对象复制到另外一块上面,
然后再把已使用过的内存空间一次清理掉。
-
优点
-
实现简单,高效 - 没有空间碎片
-
-
缺点
-
空间利用率比较低,可用内存缩小为了原来的一半
-
-
复制算法能不能调成9:0.5:0.5或者调成9:1:1
-
-
活的少-死的多 ,优化8:1:1
-
Eden区:from Survivor:To Survivor 1不够的话进行,空间分配担保
-
-
空间分配担保
-
目的:空间分配担保是为了确保在 Minor GC 之前老年代本身还有容纳新生代所有对象的剩余空间。
-
空间分配担保是为了确保在 Minor GC 之前老年代本身还有容纳新生代所有对象的剩余空间。
-
在发生Minor GC之前,虚拟机会先检查年老代最大可用的连续空间是否大于新生代所有对象的总空间,如果条件成立,那么Minor GC可以确保是安全的。
如果不成立,则虚拟机会查看HandlePromotionFailure设置值是否允许担保失败。
如果允许,那么会继续检查年老代最大可用连续空间是否大于历次晋升到年老代对象的平均大小,
如果大于,将尝试进行一次Minor GC,尽管这次Minor GC是有风险的。
如果小于,或者HandlePromotionFailure设置不允许冒险,那这时候改为进行一次Full GC。
-
新生代GC的时候 检查老年代剩余空间是否大于新生代的总和,如果大于将尝试进行一次Minor GC,尽管这次Minor GC是有风险的。
-
如果小于,或者HandlePromotionFailure设置不允许冒险,那这时候改为进行一次Full GC。
-
-
-
Jvm-垃圾回收算法
最新推荐文章于 2022-03-07 17:12:39 发布