基本回收算法
1,GC复制算法
把内存分为两个区域:活动区和空闲区。然后标记出可达对象复制到空闲区,将空闲区变为活动区,同时把以前的活动区中的对象清除掉并变为空闲区。
优点:I,速度快
缺点:I,耗费空间
II,如果全是活动对象,此时相当于增加了一倍的空间,却没回收任何对象。
2,标记清除算法
当有效内存耗尽时,程序会停止,JVM会标记从根可达的对象,清除不可达的对象,注意如果此时程序不停止,就有可能会有新的对象产生,新对象到根又可能是可达的,要是此时的标记已经不会扫描到新对象的节点,那么新对象将会作为不可达对象被清除掉。
缺点:I,标记采用的递归算法效率低。
II,释放空间不连续容易导致内存碎片。
III,需要停止程序。
3,GC标记/整理法
标记谁是活跃对象,并且整理成一颗连续的树。
JVM垃圾回收分代回收算法
1,分代GC在新生代的算法:采用的GC的复制算法,原因是:速度快,新生代一般都是新对象,都是可能会被很快释放的对象。
2,分代GC 在老年代的算法: 标记/整理算法,GC会把正在使用的对象整理成一段连续的内存。