【简述】
垃圾回收GC(Garbage Collection),GC中的垃圾,特指存于内存中不会再使用的对象,回收相当于清除垃圾。
垃圾回收有很多种算法,如:引用计数法、标记压缩法、复制算法、分代分区思想。
[ 引用计数法 ]
是比较古老经典的垃圾收集算法,其核心就是对象在被其引用时计数器+1,而当引用失效时-1,这种方式有一个非常严重的问题:无法处理循环引用的情况,且每次进行操作比较浪费系统性能。
[ 标记清除法 ]
分为标记和清除两个阶段来处理内存中的对象。这种方式也有一个弊端:空间碎片问题,垃圾回收后的空间不是连续的,不连续的内存空间的工作效率要低于连续的内存空间。
[ 复制算法 ]
其核心思想就是将内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存留对象复制到未被使用的内存块中,之后去清除之前正在使用的内存块中的所有对象,反复去交换这两个内存的角色,完成垃圾收集。
Java中新生代的from和to区就是使用这个算法。
[ 标记压缩法 ]
标记压缩法对标记清除法基础上做了优化,把存活的对象压缩到内存一段,然后进行垃圾清除。
Java中老年代使用的就是标记压缩法。