垃圾收集概念、垃圾收集算法

垃圾收集弄清3个问题

1、哪些内存需要回收    2、何时回收    3、怎么回收(垃圾收集算法)


垃圾收集概念:

有效自动监测对象是否超过作用域而达到自动回收内存的目的。


引用计数算法:给对象加一个引用计数器,用到的时候+1,引用失效的时候-1,当计数器为0时对象可能不再被使用

优点:实现简单,效率高

缺点:如两个对象互相引用,A.instance = B,  B.instance = A  这两个对象都不再有用,但是计数器不为0,不能回收


可达性分析算法:GC Roots作为对象起始点,向下搜索,走过的路径称为引用链,当一个对象没有任何引用链相连,则对象不可用,可以回收。



垃圾收集算法:

1、标记-清除算法

    首先标记所有需要回收对象,在完成标记后统一回收

    缺点:1、效率不高,标记和清除过程效率低

              2、标记清除后产生大量不连续的内存碎片,导致需要给较大对象分配内存时找不到空间,又开始下一次gc


2、复制算法

    将内存分为大小相等两块,每次只用一块,当一块用完时,将存活的对象复制到另一块上,将用过的那块内存空间一次性清理

    优点:每次对整个半区进行回收,不产生碎片,简单高效

    缺点:内存缩小为原来的一半,这样缩小一半的代价很高


3、标记-整理算法

    与标记-清除算法相似,但标记后不是马上清除,而是所有存活的对象像一端移动,然后清除掉边界以外的内存

猜你喜欢

转载自blog.csdn.net/dennis_wu_/article/details/80682661