GC - 回收算法

2022-03-14  本文已影响0人  Zeppelin421

标记-清除算法

标记-清除算法(Mark Sweep )是很多垃圾回收算法的基础,分两个步骤:

标记清除算法执行过程中会产生“stop the world”。因为如果不暂停Java程序,在标记完成后又新产生了一个对象,而该对象已经错过了标记期,那么在接下来的清除流程中会被视为不可达对象而被清理。


优点
基于最基础的可达性分析算法,是最基础的收集算法

缺点
标记清除后会产生大量不连续的内存碎片,每次分配都需要遍历空闲列表找到足够大的分块;在分配大内存对象时,无法找到足够的连续内存,从而触发另一次垃圾收集动作

复制算法

复制算法(Copying)简单来说就是将内存一分为二,但只使用其中一份,在垃圾回收时,将正在使用的那份内存中存活的对象复制到另一份空白的内存中,最后将正在使用的内存空间的对象清除,完成垃圾回收


优点

缺点

标记-整理算法

标记-整理算法(Mark Compact)又称标记-压缩算法,该算法标记阶段和 Mark-Sweep 一样,但是在完成标记之后,它不是直接清理可回收对象,而是将存活对象都向一端移动,然后清理掉端边界以外的内存。


优点
有效利用了堆,不会出现内存碎片,也不会像复制算法那样只能利用堆的一部分

缺点

分代收集算法

分代收集算法(Generatinal Collection)是目前大部分 JVM 的垃圾收集器采用的算法。它的核心思想是根据对象存活的生命周期将内存划分为若干不同的区域,一般将堆区划分为老年代(Tenured Generation)和新生代(Young Generation)。


上一篇 下一篇

猜你喜欢

热点阅读