java语言与c语言中垃圾回收的不同方式

上传人:E**** 文档编号:118617929 上传时间:2019-12-20 格式:PDF 页数:2 大小:159.70KB
返回 下载 相关 举报
java语言与c语言中垃圾回收的不同方式_第1页
第1页 / 共2页
java语言与c语言中垃圾回收的不同方式_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《java语言与c语言中垃圾回收的不同方式》由会员分享,可在线阅读,更多相关《java语言与c语言中垃圾回收的不同方式(2页珍藏版)》请在金锄头文库上搜索。

1、程序设计 P r o g r a m D e s ig n J a v a语言与 C语言中垃圾回收的不同方式 【 关键词 】J a v a语 言 C语 言 垃圾 回收 现 如今 随 着 网络 时代 的迅猛 发展 ,对于 编程 者来说,为 了提高系统效率 ,节省 内存空 间,垃圾回收变得 日益重要 。垃圾 回收可 以有 效释 放并利用可用 内存。 垃圾 回收 是 一种 动态存 储 管理技 术 ,它 自动地释放不再被程序 引用 的对 象,按照特 定 的垃圾回收算法来实现资源 自动 回收 。 在不 同语言 中垃 圾 回收 的方式也不相 同, 本 文将 以 J a v a语言 和 C语 言为例 进行

2、说明。 使读者能够 了解垃圾 回收 的重要性 。 1 J a v a 语言 中的垃圾 回收机制 时 下最流 行 的编程语 言 J a v a 拥 有 自己的 垃圾 回收机 制。实际上,J a v a语言来 自于 c + + 语 言 。但 J a v a语言避 免 了 c + +语 言 中复杂 的 结构,成功克服 了多重继承机制存在 的二义性 问题;J a v a的垃圾 回收机制显著地提高 了程序 的效率,降低 了复杂度 。由于有垃圾 回收机制 , 使 J a v a中的对 象不 再有 “ 作用 域 ”的概念 , 而 只有对象 的引用才有 “ 作用域 ”。垃圾 回收 器是一 一 种动态存储分配器

3、 ,它 自动释放程序 不 再需要的 已分配堆块 ,并且 能够 压缩进 程堆块 所需要的 内存空 间。垃圾 收集 是指 自动回收不 被程序 占用 的分配 堆块 的过程 。在一个支持垃 圾收集 的系 统中,应用显式分配堆块 ,但是从 不显式释放 堆块 。垃圾回收器一般是作为一个 低级 别的独 立线 程运行,不可预知的情况下对 内存堆 中已经废 除的或者长时间没有使用的对 象进行清 除和回收,而程序员不能实时的调用 垃圾 回收 器对某个对象或所有对象进行垃圾 回 收 。 J a v a编程 人 员不 用担 心 内存 管理 ,垃圾 收集 器会 自动进行管理 。但是垃圾 回收机制通 常 只在满 足两个条

4、件时才运行 :即有对象要求 回收 并且 系统需要回收 。那么 ,J a v a的垃圾 回 收机制是 如何操作的呢 ?下面我们来 了解一 下 J a v a垃圾 回收机制的算法。 文 王贯飞 = - a 1 1 0 c( ) 保守的垃 f r e e( ) C 应用程序 据 售 1 , 、 1 1引用计数法 引用计 数法 ,是 最原 始也 是被 很 多语 言 所广 泛应用 的垃圾回收算法。其主 旨是给堆 中 每一个对 象都设置 一个 引用计数 ,当其被赋值 给对 象的 引用时 ,其引用计数加 1 ,当其对象 的引用超 出生命 周期或者被新值赋值时 ,引用 减 l ,当其引用计数为 0时,即可被系

5、统 回收 。 1 2跟踪 算法 图 1 引用 计数 法一 种重 要 的问题 在于 当对 象 间出现循环引用的时候,其计数永远不会为 0 , 既永远不会被回收 。 跟 踪算法 解决了这一问题, 跟踪算法是采用从根集开始扫描 来识别对象是 否可达 。标记可达 的对 象,将不 可达 的对象也 就是未标记 的对象清除 , 又称标记和清除算法。 1 3压缩算法 跟 踪算 法 的一个 问题 就是 清除 对象 后 的 内存 空间变成了堆碎片 ,不便于再次利用 。为 了解决这个问题 ,引入 了压缩算法 。所谓压缩 算法就是在清除的过程 中,将所有对象移动 到 堆的一端,而本来的那端就变成 了一段空 闲内 存区

6、,收集器要对移动对象 的所有 引用进行 更 新。 1 4复制算法 压缩 算法 的 问题在 于每 次对 对 象引用 更 新 的时候都产生 了冗余 的句柄和句柄表 。 为此 , 又 引入 了复制算法 ,复制算法的主 旨是在一开 始就把堆分成 一个对 象面和多个空闲面,将对 象面 的内存 空间分配给 程序,当空间满了的时 候 ,利用追踪算 法的机 理扫描活动对象 ,但并 不清 除,而是将 每个活动对象复制到空闲面 , 这样 空闲面和对 象面 就互换 了。 1 5分代 算法 复制算法又称停止和复制算法 ,在其对 象 面和空闲面切换 的过程 中程序要暂停执行 ,这 样 大大降低 了程序执行的效率 。分代

7、算法 正好 可 以解 决这个问题。分代算法基于程序 中大多 2 66电子技术与软件工程E l e c t r o n i c T e c h n o lo g yS o f t w a r e E n g i n e e r i n R 数对 象生命周 期较 短,少数较长的特 点,将堆 分成 多个 ,每个 子堆作为对象 的一代 。垃圾 收 集器 从最新创建的对象 中,将活跃 的对 象移 到 最 高代 的子堆 中,这样 老一代的子堆不会被经 常 回收 , 利用 这种 分代式的方法,节约 了时间。 1 6 自适应 算法 自适 应法 ,就是 指根 据特 殊 情况 ,采 取 特殊 算法 ,通过监控当前

8、堆的使用情况选 择适 当的算法进 行垃 圾回收。 垃圾 回收要 占用时间,因此 , J a v a运行时 , 系统只在需要的时候才使用它 ,而编程 者本身 无法知道回收发生的准确时 间。但如果需要垃 圾 回收 ,编程者也可 以随时调用下面的方法之 一 : S y s t e mg c O; R u n t i me g e t R u n t i me 0g c O; 2 c 语言中的垃圾回收 C语 言凭借 其简 洁紧凑、数 据类型丰富、 程序执 行效率高等特点 ,拥有着大量 的编 程爱 好 者,而 众多 I T界牛人 也说 ,精 通 c语 言, 就等 于精通 编程 。然而 C语 言实 际上

9、是没 有 垃圾回收机制的 ,那么被如此广泛应 用的编程 语言如何来处理其垃圾 回收 问题呢 ? 答 案 就 是 使 用 保 守垃 圾 收 集 器 并 调 用 f r e e ( 1 函数 。像 J a v a 语 言 中,垃 圾收集器 对于 指针的创建和使用有着严格 的控制,所 以其能 回收所有 的垃圾 内存 ,而诸 如 C这样的语言 , 垃圾收集器不能被严格控制 ,则称之为保守垃 圾收集器 。 那 么在 C语言 中的 垃圾 收集器 是如 何工 作 的呢 ? c语言支持垃圾 回收系统 ,如前文所 说, 在 支持垃圾收集 的系统中, 应用 显示分配堆块 , 但 不 显式地 释放 。而在 C语 言

10、程 序 中,应 用 程 序调 用 ma l l o c O函数但 是 从不调用 f r e e ( ) 函 数,取而代之的是使用垃圾 收集器 周期性识别 垃圾堆块 ,并需要编 程人员调 用 f r e e ( ) 函数 , 下转 2 7 0页 单片机技术 S C M T e c h n o lo g y 基于 MS P 4 3 0 F 5 4 3 8 A单片机的环境参数监测系统设计 温 度 、 湿 度 、 光 强、 红 外 辐射等参数是标定环境不可缺少 的参 数 ,对 其 进行 准确 的监 测 具 有 重要 意义。 本文 以 室 内居住 环 境监 测 为 背号 ,设 计 了一 种基 于 M S

11、 P 4 3 0 F 5 4 3 8 A单 片机 的环 境监 测 系统,并 对 系统软 硬件 模 块进 行 了相 关设计 及调 试 实验 结 果表 明:该 系统 测量 稳 定性 好,稳 定 性佳 ,具有较好 的市场前景 。 【 关键词】环境参数监测 M S P 4 3 0 F 5 4 3 8 A 单 片机传感器 1绪论 随 着社 会 的发展 ,环境 参数 的监 测 已成 为 目前社会大众关注 的焦 点。而环境参数的监 测需要相关专业 的仪器 设备,传 统的测量设备 体积较大 ,实时性差 ,精度低 ,还需花费较大 的人力 , 己不再适应现代经济的快速发展要求 。 随着单片机 技术、传感器技术、通

12、信技术 、计 算机等技术 地快 速发展,环境监测技术也 日新 月异 。各种 实时性好,精度高,且适应各种苛 刻环境 的测 量系统有望得到开发,在社会各个 领域得 到广泛应 用。 本 文 以室 内居 住环 境监 测为 背景 ,设计 了一 种基 于 MS P 4 3 0 F 5 4 3 8 A单片 机 的环 境监 测 系统,对系统系统软硬件进行 了相关设计 , 图 1 :系统模 块框 图 对整机系统进行 了调试 。实验结果表 明:该 监 测系统测试稳定性好 ,稳定性佳 ,具有较好 的 市场前景 。 2硬件设计 系统模块框 图如 图 1 所示 。 由 图 可 知 , 该 系 统 以 T I公 司 单

13、 片 机 MS P 4 3 0 5 4 3 8 A作为主控 芯片 ,包含 电源、温 湿度等传感器 、液 晶显示 、键盘等模块 。 2 】 1 M S P4 3 O F5 4 3 8 A 本 系 统 采 用 的 单 片 机 为 T I单 片 机 ms p 4 3 0 F 5 4 3 8 A。T I公司 的 MS P 4 3 0系列是一 个特 别强 调超 低功 耗 的单片 机 品种,另 外该 系列的 C P U 采用 1 6位精简指令系统,集成 有 1 6位寄存 器和常数 发生器 ,发挥 了最高 的 代码 效率。它使 用数字控制振 荡器 ( DCO), 使得从低功耗模式到唤醒模式的转换时间小于 6

14、 u s 。 在 目前越来越注重 功耗 和效率 的形式下, 该系列单片机无疑是一个合适的选择 。 2 2 传感器模块 光 强传 感器选 用 的是 BH1 7 5 0 F VI ,这 是 一 种用于两线式 串行 总线接 口的数字型光强度 传感器集成 电路 。这种集成 电路可 以根据采集 的光线强度数据来调整液 晶或者键 盘背景灯的 亮度 。利用它 的高分辨 率可 以探测较大范 围的 光强度变化 。该传感 器支持 I 2 C通信,最小误 差变动在 2 O ,受红外线影响很小 。 温 度 传 感 器选 用 的是 T MP 2 7 5 ,是 一个 精 度 为 O 5,两 线 制 , 串行 输 出 温度

15、 传 感 器 , 采 用 S O一 8的 封 装, 检 测 温 度 一 2 0 至 上接 2 6 6页 将这些垃圾堆块放 回到 空闲链 表中。因此,只 依靠垃圾收集器是无法做到垃 圾内存 的全部释 放 。 下面我们用有 向图的概念理解存储器 ,当 存 在一 条从任 意根 节点 出发并 到达 Q点 的有 向路径 时 ,我们 说节 点 O是 可达 的。J a v a语 言 中的垃圾 回收器,能够准确的标记每个节点 是否可达 ,并将 不可达的节点 回收 ,放入空链 表 中。而 C语 言的 垃圾 回收 器 ,就 是我 们所 说 的保 守垃圾回收器 ,能够正确地标记可达 的 节 点,但 一些不可达的节点却有可能被错误地 标记为 可达。从而,被错误标记的节 点,将永 远不会 被回收。可想而知 ,当系统 中的内存被 错误标记 所 占满 时,系统将无法再运行。 下 面 我 们 来 看 ,垃 圾 收 集 器 如 何 为 C 程 序将 一 个 保 守 的 收 集 器 加入 到 已 存在 的 ma l l o c O函数 中,如 图 1 所示 。 垃 圾 收 集 器 作 为 一个 应 用 并 行 的独 立 线程 ,不 断地 更新 有 向图和 回收垃 圾。无 论 应 用程 序何 时需 要 内存 空间,系 统都 会调 用 ma l l o e (

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号