跟踪收集器
跟踪收集器采用集中式的管理方式,全局记录每个对象的引用状态,执行时,把一系列GC Root对象作为起点,向下搜索引用链,如果一个对象到GC Root之间没有任何引用链,那么这个对象就可以被回收。
此类回收算法有三种:标记-清除、标记-复制和标记-整理。
标记-清除
标记清除是最基本的收集算法,其他算法都是以这种思想为基础。标记-清除算法分为两个节点:标记和清除。首选标记出需要回收的对象,然后对这些对象同一清除。
缺点:标记和清除的执行效率不高。会产生很多不连续的内存碎片。
标记-复制
这种算法首先将可用内存空间分为两块,一次只使用一块,使用完之后,会将存活的对象复制到另一块中,然后对使用过的内存统一清除,这样就使得每次只对一块内存进行回收,不会产生内存碎片。
缺点:可用内存会变为原来的一半。
标记整理
标记-整理中标记的过程和标记-清除算法相同,而后续操作不只是清除被标记的对象,同时还会将存活的对象移动到内存的一端,并更新引用对象的指针,所以,不会产生内存碎片。
缺点:执行效率不高。
引用计数回收器
引用计数回收器采用分散式的管理方式,通过计数器记录对象是否被引用,当计数器为0时说明此对象不再被使用,可以被回收。
缺点:不能回收循环引用的无用对象。