程序设计 · Program Design Java语言与 C语言中垃圾回收的不同方式 【关键词 】Java语 言 C语 言 垃圾 回收 现 如今 随 着 网络 时代 的迅猛 发展 ,对于 编程 者来说,为 了提高系统效率 ,节省 内存空 间,垃圾回收变得 日益重要 。垃圾 回收可 以有 效释 放并利用可用 内存。 垃圾 回收 是 一种 动态存 储 管理技 术 ,它 自动地释放不再被程序 引用 的对 象,按照特 定 的垃圾回收算法来实现资源 自动 回收 。 在不 同语言 中垃 圾 回收 的方式也不相 同, 本 文将 以 Java语言 和 C语 言为例 进行 说明。 使读者能够 了解垃圾 回收 的重要性 。 1 Java语言 中的垃圾 回收机制 时 下最流 行 的编程语 言 Java拥 有 自己的 垃圾 回收机 制。实际上,Java语言来 自于 c++ 语 言 。但 Java语言避 免 了 c++语 言 中复杂 的 结构,成功克服 了多重继承机制存在 的二义性 问题;Java的垃圾 回收机制显著地提高 了程序 的效率,降低 了复杂度 。由于有垃圾 回收机制 , 使 Java中的对 象不 再有 “作用 域 ”的概念 , 而 只有对象 的引用才有 “作用域 ”。垃圾 回收 器是一一种动态存储分配器 ,它 自动释放程序 不 再需要的 已分配堆块 ,并且 能够 压缩进 程堆块 所需要的 内存空 间。垃圾 收集 是指 自动回收不 被程序 占用 的分配 堆块 的过程 。在一个支持垃 圾收集 的系 统中,应用显式分配堆块 ,但是从 不显式释放 堆块 。垃圾回收器一般是作为一个 低级 别的独 立线 程运行,不可预知的情况下对 内存堆 中已经废 除的或者长时间没有使用的对 象进行清 除和回收,而程序员不能实时的调用 垃圾 回收 器对某个对象或所有对象进行垃圾 回 收 。 Java编程 人 员不 用担 心 内存 管理 ,垃圾 收集 器会 自动进行管理 。但是垃圾 回收机制通 常 只在满 足两个条件时才运行 :即有对象要求 回收 并且 系统需要回收 。那么 ,Java的垃圾 回 收机制是 如何操作的呢 ?下面我们来 了解一 下 Java垃圾 回收机制的算法。 文/王贯飞 =- a1 1 0c() 保守的垃 ~free() C应用程序 据 1售 ^,■、 1.1引用计数法 引用计 数法 ,是 最原 始也 是被 很 多语 言 所广 泛应用 的垃圾回收算法。其主 旨是给堆 中 每一个对 象都设置 一个 引用计数 ,当其被赋值 给对 象的 引用时 ,其引用计数加 1,当其对象 的引用超 出生命 周期或者被新值赋值时 ,引用 减 l,当其引用计数为 0时,即可被系统 回收 。 1.2跟踪 算法 图 1 引用 计数 法一 种重 要 的问题 在于 当对 象 间出现循环引用的时候,其计数永远不会为 0, 既永远不会被回收 。跟 踪算法 解决了这一问题, 跟踪算法是采用从根集开始扫描 来识别对象是 否可达 。标记可达 的对 象,将不 可达 的对象也 就是未标记 的对象清除 ,又称标记和清除算法。 1.3压缩算法 跟 踪算 法 的一个 问题 就是 清除 对象 后 的 内存 空间变成了堆碎片 ,不便于再次利用 。为 了解决这个问题 ,引入 了压缩算法 。所谓压缩 算法就是在清除的过程 中,将所有对象移动 到 堆的一端,而本来的那端就变成 了一段空 闲内 存区,收集器要对移动对象 的所有 引用进行 更 新。 1.4复制算法 压缩 算法 的 问题在 于每 次对 对 象引用 更 新 的时候都产生
java垃圾回收与c_Java语言与C语言中垃圾回收的不同方式
最新推荐文章于 2021-05-23 02:36:26 发布