垃圾回收

来源:互联网 发布:在线图片编辑软件 编辑:程序博客网 时间:2024/04/28 03:19
    写过C/C++程序的人都知道, 要记住清除对象是非常痛苦的事情, 而且忘记清除对象会导致内存泄漏.现在很多高级语言都包含了垃圾回收机制,使程序员能更加关注业务的实现.    垃圾回收的目的是将无用对象占用的内存空间回收.下面我们介绍垃圾回收的算法:    引用技术-给每个对象实例加一个计数,当计数为零时, 就回收该对象占用的空间.该方法的优点是速度快, 缺点是无法处理程序内部的循环引用,现在基本已经没有使用这种技术的垃圾回收器了;     跟踪技术-从根节点集合对所有对象按照引用关系进行遍列,所有遍列经过的对象都是有效的, 反之,则是无效的.这个根节点集合可以是每个线程内栈上的对象,也可以是程序中所有的对象集合.这个方法实现垃圾回收一般有两个阶段, 标记和清除.在标记阶段,垃圾回收器遍例所有的对象将那些活动的对象进行标记,清除阶段,将那些没有标记的对象占用的内存空间进行回收.    垃圾回收会产生内存碎片, 两个通用的方法是压缩和拷贝方法:    压缩技术-将所有活动的对象向堆的一端移动,这种方法使用的一个对象指针表,当对象移动时,只需要更新指针就可以了,但这降低了访问对象的性能.    拷贝技术-将活动的对象拷贝到一个新的内存空间.这在遍历对象的过程中就可以完成, 从而省略了标记和清除的步骤.但是这种方法需要一倍额外的内存空间,因为在程序运行过程中只有一半的内存在使用.
原创粉丝点击