标记-清除算法
顾名思义,首先标记所有需要回收的对象,然后统一回收所有被标记的对象
缺点:
1.标记和清除的效率都不高
2.标记清除后会产生大量的内存碎片
复制算法
内存按容量划分为大小相等的两块,每次只使用其中一块内存,当其中一块内存使用完后,将还活着的对象复制到另一块内存上,然后把已使用的内存空间一次性清除掉,这样内存分配时就不用考虑内存碎片的情况,实现简单,运行高效,但是会浪费一半的内存。现在一般是9:1,这样就只会浪费10%的内存空间,但是需要有其他的内存空间进行分配担保。
标记-整理算法
复制算法在对象存活率较高时要进行较多的复制操作,效率会降低。所以老年代不会使用这种算法。
标记-整理算法的标记过程和标记-清除算法一样,后续是先将存活的对象向一段移动,然后清理掉端边界以外的内存,这样在内存分配时也不用考虑内存碎片的问题。
分代收集算法
这种算法没用新的思想,只是根据内存的存活周期内存分为新生代和老年代,新生代对象的存活率较低,使用标记-清除算法或者标记-整理算法,老年代的存活率较高,使用复制算法。