1. 标记-清除算法(Mark-Sweep)
最基础的垃圾回收算法,分为两个阶段,标注和清除。标记阶段标记出所有需要回收的对象,清除阶段回收被标记的对象所占用的空间。
缺点:该算法最大的问题是内存碎片化严重,后续可能发生大对象不能找到可利用空间的问题。
2. 复制算法(Copying)
适合回收新生代
按内存容量将内存划分为等大小的两块。每次只使用其中一块,当这一块内存满后将尚存活的对象复制到另一块上去,把已使用的内存清掉
3. 标记-整理算法(Mark-Compact)
适合回收老年代
先标记,然后让所有存活得到对象都向一端移动,然后直接清除掉端边界以外的内存。
4、分代收集算法(Generational Collection)
根据对象的存活周期不同将内存划分为不同的几块,根据各个年代的特点采用适当的收集算法。
新生代:朝生夕灭的对象(例如:方法的局部变量等)。
老年代:存活得比较久,但还是要死的对象(例如:缓存对象、单例对象等)。
永久代:对象生成后几乎不灭的对象(例如:加载过的类信息)
老年代采用什么算法?
标记清除,标记整理算法