java垃圾回收有三种算法:标记-清除算法、复制算法和标记整理算法
1:标记清除算法
如图所示,先将内存中不使用的部分标记,然后统一释放空间。
缺点是释放后的空间可能不连续,容易导致空间浪费。
2:复制算法
如图所示,这种算法将内存分为两部分,一部分用来分配,另一部分空出来。清理时,先将第一部分内存中活着的对象复制到空的内存中,然后将第一部分内存清空,这样就清除了无效对象并把活着对象分配到了一起。
缺点是可使用内存只有一半,造成空间的极大浪费。
3:标记整理算法
如图所示,将存活对象连接在一起,然后将后方内存清空。
缺点是在移动存活对象的时候需要更多的时间,从而使效率下降。
还有一种算法叫“分代收集算法”,是融合了上面三种算法而成的。它会根据不同情况而采用不同的算法。