jvm必知必会--垃圾收集算法

1 标记-清除算法

1.标记-清除 算法(mark-sweep):算法分为标记,清除两个阶段:首先标记需要回收的对象,然后统一回收被标记的对象。如图:

2.标记-清除的缺点:

  • 效率问题:标记清除的过程效率都不高。
  • 空间问题:在清除后,会产生大量不连续的内存碎片,导致程序运行分配大内存对象时,没有可用空间,导致再一次发生GC。

2 复制算法

1.为了解决效率问题,出现了“复制”的收集算法,把内存分为等大的两块,只使用其中的一块,当一块用完时,把存活的对象复制到另一块,然后整体清理。

2.hotspot虚拟机默认Eden和survivor比例为8:1,也就是可用内存为 8+1(90%),当作为复制块的survivor空间不够时,需要其他内存(老年代)进行分配担保。

3 标记-整理算法

1.标记-整理(mark-compact)算法【一般用于老年代】:当对象存活率较高时,进行复制,效率就会变低,标记整理算法是在标记清除的基础上,但不是直接清除对象,而是让存活对象向一端移动,然后清理掉端边界以外的内存。

4 分代收集算法

1.分代收集:新生代,使用复制算法。老年代对象存活率高,使用 标记-清除 或 标记-整理。

你可能感兴趣的:(jvm必知必会--垃圾收集算法)