引用计数:
给对象添加一个引用计数器,每当有一个地方引用它,计数器值就加1
当引用失效,计数器值就减1
任何时刻计数器为0的对象就是不可能再被访问了,此时垃圾回收器就会回收该对象
引用计数器是用来判断对象是否存活的,但是引用计数器有一个问题,就是循环引用
循环引用:
对象A中有一个属性B,B中有一个属性A,A和B相互引用,但是A和B又没有任何其他属性,那么A和B的引用计数器都为1,
由于引用计数器的原因,A和B都无法被回收,导致内存泄漏
循环引用的问题无法通过引用计数器来解决
循环引用的问题可以通过标记清除来解决
标记清除:
标记清除是垃圾回收器中最常见的一种算法,它分为两个阶段:
标记阶段:
垃圾回收器会遍历堆中的所有对象,然后标记出存活的对象
标记清除
标记清除是垃圾回收器中最常见的一种算法,它分为两个阶段:
标记阶段:
垃圾回收器会遍历堆中的所有对象,然后标记出存活的对象
清除阶段:
垃圾回收器会遍历堆中的所有对象,然后清除掉标记为死亡的对象
标记清除的缺点:
标记清除的缺点就是效率问题,标记清除的效率问题主要体现在两个方面