JVM一共有四种垃圾收集算法:标记-清除算法,复制算法,标记-整理算法,分代垃圾收集算法
1、标记-清除算法
分为两个阶段:标记和清除阶段。
这个算法⾸先标记出所有还存活的对象,回收掉所有没被标记的对象
优点是:实现简单,不需要额外的空间
缺点就是:
① 回收效率低(因为两次扫描,严重浪费时间)
② 会产生大量的内存碎片,导致无法给大对象分配内存空间
2、复制算法
它将内存区域分为相等的两块,每次只使用其中的一块。
当正在使用的这一块区域用完了,就将还存活的对象复制到另外那块区域中,然后集中对之前使用的那块进行清理。
缺点就是:只使用了一半的内存空间,空间利用率地低
3、标记-整理算法
这个算法标记出所有存活的对象,然后将他们整理并移动到内存区域的一端。然后清理掉存活对象所占区域边界以外的区域
优点:不会产生碎片空间
缺点:需要移动大量对象,处理效率比较低
4、分代垃圾收集算法
现在的商业虚拟机一般都采用这种算法。
这个算法根据对象存活周期,将内存分为几块(新生代-老年代),不同的快采取不同收集算法。
其中的新生代又详细分为:Eden区,幸存区1(from区),幸存区2(to区).他们的比例默认为:8:1:1
新生代采用:复制算法
老年代采用:标记-清除算法 或者 标记-整理算法