返 回

附 文2:JIT 的 工 作 机 制


---- 即 时 编 译 器( 或JIT) 通 过 在 运 行Java 程 序 前, 将 字 节 码 编 译 成 为 本 地 机 器 码, 从 而 能 极 大 地 提 高 程 序 的 运 行 效 率。 本 节 简 要 介 绍JIT 是 如 何 工 作 的。 如 果 读 者 想 了 解 更 多 有 关 编 译 器 和 解 释 器 的 信 息, 请 参 看“ 编 译 器 和 解 释 器 是 怎 样 工 作 的”。

什 么 使 得JIT 独 树 一 格

---- JIT 编 译 器 将 一 系 列 字 节 码 转 换 成 为 机 器 指 令, 当JIT 第 一 次 碰 到 这 些 字 节 码 的 时 候。 接 着 就 执 行 这 些 机 器 指 令 而 不 是 去 解 释 字 节 码。 这 一 过 程 显 示 在 下 面 的 图 表 中。

图7 即 时 编 译 器(JIT) 把 读 入 的 字 节 码 转 换 成 为 机 器 指 令, 并 且 进 行 一 定 程 度 的 优 化。 作 为 结 果 的 程 序 接 着 就 运 行。 那 些 并 不 执 行 的 程 序 不 被 编 译, 因 此JIT 在 那 些 不 运 行 的 代 码 上 从 不 花 费 时 间。

---- 机 器 指 令 不 存 储 在 别 处, 就 存 储 在 内 存 之 中。( 这 也 就 是 为 什 么 在 图 中, 它 们 被 画 在 虚 线 框 中。) 当 程 序 在 下 次 运 行 的 时 候, 字 节 码 又 再 一 次 被 翻 译 成 为 机 器 码。 这 一 结 果 表 明 字 节 码 仍 是 可 移 植 的, 并 且 它 们 能 比 通 常 的 解 释 执 行 快 得 多-- 实 际 上 能 够 快 上50 多 倍。 典 型 地 讲, 它 的 速 度 可 以 满 足I/O 处 理 较 频 繁 和 交 互 性 较 强 的 应 用 程 序。

什 么 情 况 下JIT 会 成 功-- 而 在 什 么 情 况 下 并 不 理 想

---- 由 于JIT 是 将 一 系 列 指 令 进 行 翻 译, 而 不 是 每 次 执 行 一 条 指 令, 因 此 它 可 以 对 代 码 进 行 一 定 程 度 的 优 化。 例 如, 当 某 一 数 值 已 经 存 在 的 时 候,JIT 就 可 以 不 必 重 新 将 这 个 数 值 载 入 到 内 部 寄 存 器 中。 由 于 这 个 原 因, 而 且 因 为 程 序 执 行 的 是 机 器 码, 所 以JIT 对 于 那 些 多 次 执 行 同 一 组 语 句 的 数 值 计 算 程 序 十 分 适 宜。

---- 另 一 方 面,JIT 并 不 能 为I/O 频 繁 或 需 要 很 多 垃 圾 收 集 的 代 码 带 来 较 多 的 益 处-- 象 这 样 的 程 序, 它 们 的 执 行 代 码 仅 仅 占 据 一 小 部 分 的 时 间, 对 它 们 优 化 的 结 果 几 乎 让 人 无 法 感 觉 到。 初 始 化 代 码 同 样 也 给JIT 摆 出 了 一 个 难 题。 因 为JIT 优 化 它 所 遇 到 的 任 何 代 码, 因 而 它 可 能 会 将 许 多 时 间 豪 无 价 值 地 花 费 在 优 化 初 始 化 代 码 及 其 它“ 一 次 性” 代 码 之 上。 最 后 想 说 明 的 是,JIT 不 可 能 提 供 太 好 的 优 化-- 因 为 这 不 可 避 免 地 会 浪 费 一 些 时 间, 一 旦JIT“ 更 好”, 它 就 会 在 没 有 用 的 优 化 上 面 花 费 更 多 的 时 间。

返 回


中国计算机世界出版服务公司版权所有