Hello World

垃圾收集算法

1. 标记—清除(Mark-Sweep)算法

1.1 定义

  最基础的算法,包括标记和清除两部分。

  首先把需要回收的对象进行标记,标记完成后进行回收。

1.2 缺点

  a.标记和清除的效率都很低;

  b.该算法收集后产生大量不连续的内存碎片,导致分配大对象没有完整的足够大的内存而触发GC;

2. 复制算法

2.1 定义

  将内存分为大小相等的A,B两块,先在A内存上分配对象,当A内存不够使用时将所有存活的对象复制到B内存(复制后的对象内存是连续的),然后清除A内存。

2.2 缺点

  内存只有原来的一半;

2.3 优化

  因为在堆中,新生代的对象大多时朝生夕死,而老年代对象存活率较高。

  因此在新生代中 Eden : From Survivor :To Survivor = 8:1:1 大大提高了内存的使用率。

  新创建的对象都会被分配到Eden区(一些大对象特殊处理),这些对象经过第一次Minor GC后,如果仍然存活,将会被移到Survivor区。对象在Survivor区中每熬过一次Minor GC,年龄就会增加1岁,当它的年龄增加到一定程度时,就会被移动到年老代中。

 

3. 标记—整理(Mark Compact)算法

3.1 定义

  先对对象进行标记,然后让所有存活的对象向一端移动,最后清除端边界以外的内存。

  适用于存活率较高的老年代。

4. 分代收集

  现在商业虚拟机根据堆中新生代和老年代的不同特点,使用不同收集算法进行收集,进而提高收集效率

posted @ 2018-08-21 10:32  小小忧愁米粒大  阅读(141)  评论(0编辑  收藏  举报
瞅啥瞅,好好看书