停止-复制(stop and copy)
将所有存货的对象从当前的堆复制到另一个堆,没有被复制的全部都是垃圾。
这种方式效率会降低,原因有两个。
1. 得有2个堆,在这2个堆之间来回使用。也就是需要多使用一个堆的空间。
2.当程序进入稳定状态后,可能只会产生少量、甚至没有垃圾,但是仍然会来回复制,就显得很浪费。
标记-清扫(mark and sweep)
从堆栈和静态存储区出发,遍历所有的引用,从而找出所有存活的对象,并且对这些对象进行标记。
当标记工作做完后,就进行清理工作。但是这种方式速度非常慢,只有在产生少量垃圾或不产生垃圾时,速度就会很快。
按代分配策略
这种策略认为大多数对象的寿命是短暂的,把对象按寿命长短进行划分。刚生成不久的对象被划分为最年轻的一代,虚拟机对这部分进行最为频繁的回收行为。
当这个堆中有对象的长时间存在时,则将其划分到较为年长的一代中,年长的堆的回收频率也较低。
渐进式收集策略
在进行垃圾回收的时候,需要将程序停止,影响了用户的体验。渐进式收集策略采用分步回收的方式,例如先收集20%的内存中的垃圾,剩下的80%则不受影响。
收集完成后,接着收集下一个区域的垃圾。
自适应技术
在合适的阶段,切换合适的回收策略。