引用计数算法的优点:
- 发现垃圾时立即回收:因为它可以根据当前这个引用数是否为 0 ,来决定这个对象是不是一个垃圾,如果它找到了这个时候就可以立即进行释放;
- 最大限度减少程序暂停:应用程序在执行的过程中,必然会对内存进行一个消耗。而我们当前执行平台它的内存肯定会有上限的,所以内存肯定会有暂满的时候。由于引用计数算法时刻监控着那些引用数值被置为 0 的对象,所以就可以认为举一个极端的情况就是当它发现这个内存即将爆满的时候,引用计数就会立马去找到那些数值为 0 的对象空间。然后对其进行释放,所以这样就能保证当前这个内存就不会有暂满的时候,这就是所谓的减少我们程序暂停的说法。
引用计数算法的缺点:
-
无法回收循环引用的对象:
function fn () { const obj1 = {} const obj2 = {} obj1.name = obj2 obj2.name = obj1 return 'leo' } fn() -
时间开销大:当前的引用计数需要去维护一个数值的变化,所以在这种情况下它要时刻的去监控着当前对象的一个引用数值,是否需要修改。本身它这个数值的修改就需要消耗时间,如果说内存里面有更多的对象休要修改,那么这个时间就会显得更大一些。所以这一块是相对于其他的 GC 算法来说,我们会觉得引用计数算法它的一个时间开销会更大一些。
这一块就是关于引用计数算法优缺点的一个简单说明