首先讲一下垃圾回收算法
1.标记—清除
该算法分为两个阶段:标记阶段、清除阶段。标记阶段会将所有需要回收的对象进行标记,清除阶段会将所有的标记过的对象回收。
缺点:
- 会导致大量的片段的内存空间,导致资源的浪费。
- 效率较低,会耗费大量的时间。
2.标记—整理
也是分为两个阶段:标记阶段,依旧是标记所有需要回收的对象。整理阶段,将所有存活的对象向边界移动,然后直接回收掉边界之外的对象。(一般用于老年代,老年代存活的对象较少,发生垃圾回收次数较少)
缺点:虽然一定程度解决了内存不连续,但是效率问题还是较低。
3.复制算法
为了解决效率问题,就有了复制算法。复制算法需要将内存分为同等大小的两份,每次只往一份内存中存放对象,然后这块内存占满时,只需要将存活的对象复制到另外一块内存中,然后将原来的那块内存清空即可。
4.分代算法
分代算法其实是一个概念,就是根据不同的年龄代使用不同的垃圾回收算法。例如:新生代触发垃圾回收较为频繁,且一般来说存活的对象较少,就可以选择复制算法。而老年代中一般对象存活时间比较长,所以需要占用的空间较多,所以不适合使用复制算法,可以根据需求选择“标记—整理”或“标记—清除”。