GC算法

it2023-08-31  70

引用计数算法

核心思想: 设置引用数,判断当前引用数是否为0 通过一个引用计数器来维护当前对象的一个引用数,从而判断当前引用数是否为0来决定它是不是一个垃圾对象,当数值为0的时候GC开始工作,将其所在的一个对象空间进行回收和释放再使用

引用关系改变时引用数字 当某一个对象它的引用关系发生改变的时候,引用计数器就会主动修改当前对象所对应的引用数值,什么叫做引用关系发生改变?假如有个对象空间,有一个变量名指向它就把引用数值加1,这时又有个变量指向这个对象,引用数值再加1,如果时减少的情况下,引用数值减1,当饮用对象为0时,GC就会立即工作将其回收

引用计数算法的优缺点

优点:

发现垃圾时立即回收 因为他可以根据当前的引用数是否为0,来确定当前对象是不是一个垃圾,如果找到了就进行释放最大限度减少程序暂停 我们的应用程序在执行的过程中必然会对内存进行消耗,而我们当前的执行平台的内存肯定是有上限的,所以内存肯定有暂满的时候,由于引用计数算法是时刻监控着引用数值为0的对象,所以我们可以认为当我们的内存即将爆满的时候,引用计数器会立马找到数值为0的对象空间对进行释放,所以这样就保证了当前内存不会有爆满的时候,这就所谓的减少我们暂停的说法。

缺点

无法回收循环引用的对象时间开销大 因为当前我们的引用计数需要维护一个数值的变化,在这种情况下需要时刻监控着当前对象的一个引用数值是否需要修改,本身来说这个数值的修改就要消耗时间,如果说我们的内存里面有更多的对象需要修改,那么这个时间就会显得更大一些,这是针对于其他计数算法来说时间开销大

标记清除算法

核心思想: 分标记和清除两个阶段完成 第一个阶段:遍历所有对象找标记活动对象,进行标记的操作(活动对象就是之前说的可达对象) 第二个阶段: 遍历所有对象清除没有标记的对象,同时会将第一阶段的标记抹掉,便于GC下次还可以正常的工作

标记清除算法的优缺点

优点

解决了引用计数算法的对象互相引用的回收操作 缺点空间碎片化

标记整理算法

标记整理算法可以看作标记清除算法的一个增强,因为他们在第一个阶段的标记工作时完全一样的,都会遍历当前的所有对象将可达对象进行标记,区别时在第二个阶段,标记整理会在标记之前进行整理的操作移动对象的位置让他们在地址上产生连续

最新回复(0)