计 算 机 系 统 应 用 2013 年 第 22 卷 第 7 期 器 所 做 的 工 作 实 质 是 把 类 文 件 从 硬 盘 读 取 到 内 存 中. 对 于 Java 中 的 类 大 致 可 以 分 为 三 种 : Java 系 统 核 心 类



Similar documents

何 秋 琳 张 立 春 视 觉 学 习 研 究 进 展 视 觉 注 意 视 觉 感 知

说 明 为 了 反 映 教 运 行 的 基 本 状 态, 为 校 和 院 制 定 相 关 政 策 和 进 行 教 建 设 与 改 革 提 供 据 依 据, 校 从 程 资 源 ( 开 类 别 开 量 规 模 ) 教 师 结 构 程 考 核 等 维 度, 对 2015 年 春 季 期 教 运 行 基

I

<433A5C446F63756D656E E E67735C41646D696E F725CD7C0C3E65CC2DBCEC4CFB5CDB3CAB9D3C3D6B8C4CFA3A8BCF2BBAFA3A95CCAB9D3C3D6B8C4CF31302D31392E646F63>

修改版-操作手册.doc

深圳市新亚电子制程股份有限公司

0 年 上 半 年 评 价 与 考 核 细 则 序 号 部 门 要 素 值 考 核 内 容 考 核 方 式 考 核 标 准 考 核 ( 扣 原 因 ) 考 评 得 3 安 全 生 产 目 30 无 同 等 责 任 以 上 道 路 交 通 亡 人 事 故 无 轻 伤 责 任 事 故 无 重 大 质 量


( ) 信 号 与 系 统 Ⅰ 学 科 基 础 必 修 课 教 周 2016 年 06 月 13 日 (08:00-09:35) ( )

中 国 软 科 学 年 第 期!!!

抗 战 时 期 国 民 政 府 的 银 行 监 理 体 制 探 析 % # % % % ) % % # # + #, ) +, % % % % % % % %

评 委 : 李 炎 斌 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

18 上 报 该 学 期 新 生 数 据 至 阳 光 平 台 第 一 学 期 第 四 周 至 第 六 周 19 督 促 学 习 中 心 提 交 新 增 专 业 申 请 第 一 学 期 第 四 周 至 第 八 周 20 编 制 全 国 网 络 统 考 十 二 月 批 次 考 前 模 拟 题 第 一 学

¹ º ¹ º 农 业 流 动 人 口 是 指 户 口 性 质 为 农 业 户 口 在 流 入 地 城 市 工 作 生 活 居 住 一 个 月 及 以 上 的 流 动 人 口 非 农 流 动 人 口 是 指 户 口 性 质 为 非 农 户 口 在 流 入 地 城 市 工 作 生 活 居 住 一 个

国债回购交易业务指引

《C语言基础入门》课程教学大纲

2006年顺德区高中阶段学校招生录取分数线

龚 亚 夫 在 重 新 思 考 基 础 教 育 英 语 教 学 的 理 念 一 文 中 援 引 的 观 点 认 为 当 跳 出 本 族 语 主 义 的 思 维 定 式 后 需 要 重 新 思 考 许 多 相 连 带 的 问 题 比 如 许 多 发 音 的 细 微 区 别 并 不 影 响 理 解 和

,,,,, :,, (.,, );, (, : ), (.., ;. &., ;.. &.., ;, ;, ),,,,,,, ( ) ( ),,,,.,,,,,, : ;, ;,.,,,,, (., : - ),,,, ( ),,,, (, : ),, :,

<4D F736F F D D323630D6D0B9FAD3A6B6D4C6F8BAF2B1E4BBAFB5C4D5FEB2DFD3EBD0D0B6AF C4EAB6C8B1A8B8E6>

第2章 数据类型、常量与变量

西 南 民 族 学 院 学 报 哲 学 社 会 科 学 版 第 卷 资 料 来 源 中 国 统 计 年 鉴 年 年 新 中 国 五 十 年 统 计 资 料 汇 编 中 国 人 口 统 计 年 鉴 年 数 据 资 料 来 源 中 国 统 计 年 鉴 中 国 统 计 出 版 社 年 版 资 料 来 源

课程类 别

全国建筑市场注册执业人员不良行为记录认定标准(试行).doc

采 取 行 动 的 机 会 90% 开 拓 成 功 的 道 路 2

附 件 : 上 海 市 建 筑 施 工 企 业 施 工 现 场 项 目 管 理 机 构 关 键 岗 位 人 员 配 备 指 南 二 一 四 年 九 月 十 一 日 2

<4D F736F F D20B9D8D3DAB0BABBAAA3A8C9CFBAA3A3A9D7D4B6AFBBAFB9A4B3CCB9C9B7DDD3D0CFDEB9ABCBBE C4EAC4EAB6C8B9C9B6ABB4F3BBE1B7A8C2C9D2E2BCFBCAE92E646F6378>

评 委 : 徐 岩 宇 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

金 不 少 于 800 万 元, 净 资 产 不 少 于 960 万 元 ; (3) 近 五 年 独 立 承 担 过 单 项 合 同 额 不 少 于 1000 万 元 的 智 能 化 工 程 ( 设 计 或 施 工 或 设 计 施 工 一 体 ) 不 少 于 2 项 ; (4) 近 三 年 每 年

( 二 ) 现 行 统 一 高 考 制 度 不 利 于 培 养 人 的 创 新 精 神,,,,,,,,,,,,, [ ],,,,,,,,,,, :, ;,,,,,,? ( 三 ) 现 行 统 一 高 考 制 度 不 利 于 全 体 学 生 都 获 得 全 面 发 展,, [ ],,,,,,,,,,,


珠江钢琴股东大会

Microsoft Word - 文件汇编.doc

ETF、分级基金规模、份额变化统计

目 录 一 系 统 访 问... 1 二 门 户 首 页 申 报 用 户 审 核 用 户... 2 三 系 统 登 录 用 户 名 密 码 登 录 新 用 户 注 册 用 户 登 录 已 注 册 用

一 公 共 卫 生 硕 士 专 业 学 位 论 文 的 概 述 学 位 论 文 是 对 研 究 生 进 行 科 学 研 究 或 承 担 专 门 技 术 工 作 的 全 面 训 练, 是 培 养 研 究 生 创 新 能 力, 综 合 运 用 所 学 知 识 发 现 问 题, 分 析 问 题 和 解 决

正 规 培 训 达 规 定 标 准 学 时 数, 并 取 得 结 业 证 书 二 级 可 编 程 师 ( 具 备 以 下 条 件 之 一 者 ) (1) 连 续 从 事 本 职 业 工 作 13 年 以 上 (2) 取 得 本 职 业 三 级 职 业 资 格 证 书 后, 连 续 从 事 本 职 业

思 想 政 治 理 论 经 核 查 无 误 思 想 政 治 理 论 经 核 查 无 误 思 想 政 治 理 论 经 核 查 无 误 思 想


一 从 分 封 制 到 郡 县 制 一 从 打 虎 亭 汉 墓 说 起

!!!!!!!!!!

目 录 第 一 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 硬 件 使 用 介 绍... 3 第 二 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 管 理 员 端 功 能 使 用 介 绍 系 统 管 理 员 登 陆 班

马 克 思 主 义 公 正 观 的 基 本 向 度 及 方 法 论 原 则!! # #

定 位 和 描 述 : 程 序 设 计 / 办 公 软 件 高 级 应 用 级 考 核 内 容 包 括 计 算 机 语 言 与 基 础 程 序 设 计 能 力, 要 求 参 试 者 掌 握 一 门 计 算 机 语 言, 可 选 类 别 有 高 级 语 言 程 序 设 计 类 数 据 库 编 程 类

<4D F736F F D20BFC9B1E0B3CCD0F2BFD8D6C6CFB5CDB3C9E8BCC6CAA6B9FABCD2D6B0D2B5B1EAD7BC2E646F63>

Template BR_Rec_2005.dot

名 称 生 命 科 学 学 院 环 境 科 学 1 生 物 学 仅 接 收 院 内 调 剂, 初 试 分 数 满 足 我 院 生 物 学 复 试 最 低 分 数 线 生 命 科 学 学 院 生 态 学 5 生 态 学 或 生 物 学 生 命 科 学 学 院

一 开 放 性 的 政 策 与 法 规 二 两 岸 共 同 的 文 化 传 承 三 两 岸 高 校 各 自 具 有 专 业 优 势 远 见 杂 志 年 月 日

登录、注册功能的测试用例设计.doc

学 年 第 二 学 期 集 中 考 试 安 排 (18 周 ) 考 试 日 期 :6 月 27 日 星 期 一 8:10-9:50 第 二 公 共 教 学 楼 A 区 A 高 等 数 学 ( 理 二 2) 复 材 材 料 科 学 与 工 程

工 程 勘 察 资 质 标 准 根 据 建 设 工 程 勘 察 设 计 管 理 条 例 和 建 设 工 程 勘 察 设 计 资 质 管 理 规 定, 制 定 本 标 准 一 总 则 ( 一 ) 本 标 准 包 括 工 程 勘 察 相 应 专 业 类 型 主 要 专 业 技 术 人 员 配 备 技 术

 编号:

国家职业标准:网络课件设计师

上海证券交易所会议纪要

上证指数

第1篇 道路桥梁工程技术核心专业课程标准及学习绩效考评体系

( 此 页 无 正 文, 为 广 东 东 方 精 工 科 技 股 份 有 限 公 司 关 于 提 供 资 料 真 实 准 确 和 完 整 的 承 诺 函 之 签 署 页 ) 广 东 东 方 精 工 科 技 股 份 有 限 公 司 法 定 代 表 人 : 唐 灼 林 2016 年 7 月 28 日

目 录 关 于 图 标... 3 登 陆 主 界 面... 3 工 单 管 理... 5 工 单 列 表... 5 搜 索 工 单... 5 工 单 详 情... 6 创 建 工 单... 9 设 备 管 理 巡 检 计 划 查 询 详 情 销 售 管

<4D F736F F D20D0A3B7A2A1B A1B BAC5B9D8D3DAD7E9D6AFBFAAD5B9C8ABD0A3BDCCD6B0B9A4B8DACEBBC6B8D3C3B1E4B6AFB9A4D7F7B5C4CDA8D6AA2E646F63>

<4D F736F F D C3E6CFF2B6D4CFF3A3A8B5DAC8FDD5C220C0E0CCD8D0D4A3A92E646F63>

3 月 30 日 在 中 国 证 券 报 上 海 证 券 报 证 券 时 报 证 券 日 报 和 上 海 证 券 交 易 所 网 站 上 发 出 召 开 本 次 股 东 大 会 公 告, 该 公 告 中 载 明 了 召 开 股 东 大 会 的 日 期 网 络 投 票 的 方 式 时 间 以 及 审

(Microsoft Word - NCRE\314\345\317\265\265\367\325\37313\324\27221\272\3051.doc)

抗 日 战 争 研 究 % 年 第 期! # # % %

黄 金 原 油 总 持 仓 增 长, 同 比 增 幅 分 别 为 4.2% 和 4.1% 而 铜 白 银 以 及 玉 米 则 出 现 减 持, 减 持 同 比 减 少 分 别 为 9.4%,9.4% 以 及 6.5% 大 豆, 豆 粕 结 束 连 续 4 周 总 持 仓 量 增 长, 出 现 小 幅

<4D F736F F D20C6F3D2B5C5E0D1B5CAA6B9FABCD2D6B0D2B5B1EAD7BC2E646F63>

HSK( 一 级 ) 考 查 考 生 的 日 常 汉 语 应 用 能 力, 它 对 应 于 国 际 汉 语 能 力 标 准 一 级 欧 洲 语 言 共 同 参 考 框 架 (CEF) A1 级 通 过 HSK( 一 级 ) 的 考 生 可 以 理 解 并 使 用 一 些 非 常 简 单 的 汉 语

年 第 期 % %! & % % % % % % &


第 期 李 伟 等 用 方 法 对 中 国 历 史 气 温 数 据 插 值 可 行 性 讨 论

四川省农村义务教育学生

简 报 要 点 ESI 共 有 22 个 学 科 门 类, 江 苏 高 校 目 前 只 有 16 个 学 科 门 类 进 入 了 世 界 1%, 分 别 是 一 般 社 会 科 学 临 床 医 学 农 业 科 学 分 子 生 物 学 和 遗 传 学 动 植 物 科 学 化 学 地 球 科 学 工 程

类 似 地, 又 可 定 义 变 下 限 的 定 积 分 : ( ). 与 ψ 统 称 为 变 限 积 分. f ( ) d f ( t) dt,, 注 在 变 限 积 分 (1) 与 () 中, 不 可 再 把 积 分 变 量 写 成 的 形 式 ( 例 如 ) 以 免 与 积 分 上 下 限 的

·岗位设置管理流程

2.5 选 举 陈 晓 非 女 士 为 第 六 届 董 事 会 董 事 候 选 人 的 议 案 ; 2.6 选 举 卢 婕 女 士 为 第 六 届 董 事 会 董 事 候 选 人 的 议 案 ; 2.7 选 举 张 文 君 先 生 为 第 六 届 董 事 会 独 立 董 事 候 选 人 的 议 案

应用化学专业(服装安全与评价、纺织化学方向)


证券代码: 证券简称:长城电脑 公告编号:

合 并 计 算 配 售 对 象 持 有 多 个 证 券 账 户 的, 多 个 证 券 账 户 市 值 合 并 计 算 确 认 多 个 证 券 账 户 为 同 一 配 售 对 象 持 有 的 原 则 为 证 券 账 户 注 册 资 料 中 的 账 户 持 有 人 名 称 有 效 身 份 证 明 文 件

徐天宏:《基因天堂》.doc

<443A5C6D B5C30312EB9A4D7F7CEC4B5B55C30322EBACFCDACCEC4B5B55C C30342EC8CBC9E7CCFC5C31332ECFEEC4BFC5E0D1B55C E30385C322EB2D9D7F7CAD6B2E12E646F63>

<4D F736F F D20322EC9F3BACBC8CBD4B1D7CAB8F1D7A2B2E1B9DCC0EDB9E6B7B6B8BDB1ED2E646F63>

i 1) 系 统 运 作 前 设 定 *1. [2.1 网 页 主 机 名 称 设 定 ] -- 设 定 校 务 系 统 的 主 机 IP 地 址, 以 供 其 他 个 人 电 脑 连 接 及 使 用 该 系 统 *2. [2.3.1 输 入 / 修 改 学 校 资 料 ] -- 输 入 系 统 使

标题


2. 本 次 修 改 后, 投 资 者 申 购 新 股 的 持 有 市 值 要 求 市 值 计 算 规 则 及 证 券 账 户 使 用 的 相 关 规 定 是 否 发 生 了 变 化? 答 : 未 发 生 变 化 投 资 者 申 购 新 股 的 持 有 市 值 是 指, 以 投 资 者 为 单 位

Cybozu Garoon 3 管理员手册

002 电 子 科 学 与 工 程 学 院 拟 招 生 150 人 联 系 人 : 周 老 师, 电 话 物 理 电 子 学 电 路 分 析 电 磁 场 理 论 01 电 磁 物 理 与 微 波 电 子 学 02 光 子 学 与 光 电 技 术 03 微 纳

教师上报成绩流程图

北京信息科技大学本科学生成绩管理办法

<4D F736F F D20B9D8D3DA BDECB1CFD2B5C9FAC5C9C7B2B1A8B5BDB5C8D3D0B9D8B9A4D7F7B5C4CDA8D6AAA3A E362E38A3A92E646F63>

GB

工 程 造 价 咨 询 企 业 管 理 系 统 操 作 手 册 目 录 1 造 价 企 业 登 录 企 业 基 本 信 息 查 看 企 业 人 员 信 息 查 看 企 业 基 本 信 息 操 作 企 业 简 介 企 业 章

!!

<4D F736F F D20B3D6B2D6CFDEB6EEB1EDB8F1D7EED6D52E646F63>

<4D F736F F D20B2CEBFBC3232C6DAD1A7CFB0D3EBCBBCBFBCC4DAD2B3>

上海工程技术大学教学管理工作流


物 流 从 业 人 员 职 业 能 力 等 级 证 书 分 为 四 个 级 别, 分 别 为 初 级 助 理 级 中 级 和 高 级 ; 采 购 从 业 人 员 职 业 能 力 等 级 证 书 分 为 三 个 级 别, 分 别 为 中 级 高 级 和 注 册 级 请 各 有 关 单 位 按 照 通

第 一 部 分 MagiCAD for Revit 安 装 流 程

Transcription:

1 Java 动 态 类 加 载 机 制 分 析 及 其 应 用 崔 行 臣, 赵 佟 ( 山 东 广 播 电 视 大 学 现 代 教 育 技 术 中 心, 济 南 250014) 摘 要 : Java 虚 拟 机 (JVM) 中 的 类 加 载 机 制 可 以 在 Java 应 用 程 序 运 行 期 间 动 态 加 载 类 文 件, 而 不 影 响 其 它 功 能 模 块 的 正 常 运 行. 通 过 对 Java 类 加 载 器 的 层 次 体 系 结 构, 动 态 类 加 载 机 制 原 理 实 现 过 程 进 行 分 析, 将 Java 动 态 类 加 载 机 制 应 用 到 高 校 网 站 管 理 平 台 的 文 件 发 布 模 块 中, 使 得 设 计 好 的 静 态 网 页 和 后 台 管 理 系 统 相 关 联, 通 过 自 定 义 加 载 器 来 加 载 加 密 过 的 Java 类 文 件. 这 样 以 可 插 拔 的 方 式 快 速 的 部 署 二 级 网 站, 增 强 了 网 站 管 理 平 台 的 灵 活 性 和 可 扩 展 性. 关 键 词 : Java 虚 拟 机 ; 类 加 载 器 ; 委 托 模 型 ; 动 态 类 加 载 机 制 Java Dynamic Class Loading Mechanism Analysis and Its Application CUI Xing-Chen, ZHAO Tong (Center for Educational Technology, Shandong Radio & TV University, Jinan 250014, China) Abstract: In order to load Java class file during the Java application runtime and without affecting the normal operation of other functional modules, the realization of Java dynamic class loading method is given based on the java virtual machine (JVM) mechanism. Java Class Loader architecture, theory of dynamic class loading mechanism, the implementation process are analyzed, and which are applied to the file release module of web site management platform system. The file release module is designed to make static web pages and website management system linked. Through the custom loader to loading encryption of Java class files. In a hot swap way to implement the deployment of secondary website, enhance the site management platform's flexibility and expansibility. Key words: Java virtual machine; class loader; delegation model; dynamic class loading mechanism 动 态 加 载 是 一 种 在 运 行 时 安 装 程 序 组 件 的 技 术. 许 多 操 作 系 统 如 Unix Microsoft Windows 使 用 的 动 态 连 接 就 是 一 种 动 态 加 载 技 术. 使 用 动 态 连 接 后, 程 序 中 的 符 号 引 用 可 以 在 程 序 被 加 载 到 内 存 后 才 替 换 成 相 应 的 机 器 地 址, 并 且 直 到 第 一 次 使 用 时 符 号 引 用 才 被 替 换. 与 静 态 连 接 相 比, 动 态 连 接 具 有 增 加 程 序 灵 活 性 节 约 内 存 空 间 的 优 点 [1]. Java 动 态 类 加 载 是 指 可 以 使 运 行 中 的 程 序 去 调 用 在 源 代 码 中 未 提 及 而 在 程 序 运 行 中 所 用 的 类. 一 个 应 用 程 序 总 是 由 n 多 个 类 组 成, Java 程 序 启 动 时, 并 不 是 一 次 把 所 有 的 类 全 部 加 载 后 再 运 行, 它 总 是 先 把 保 证 程 序 运 行 的 基 础 类 一 次 性 加 载 到 JVM 中, 其 它 类 等 到 JVM 用 到 的 时 候 再 加 载, 这 样 的 好 处 是 节 省 了 内 存 的 开 销, 因 为 Java 最 早 就 是 为 嵌 入 式 系 统 而 设 计 的, 内 存 宝 贵, 而 用 到 时 再 加 载 这 也 是 Java 动 态 性 的 一 种 体 现. 本 文 介 绍 了 Java 类 加 载 器 的 体 系 架 构, 研 究 探 讨 了 Java 动 态 类 加 载 机 制 的 原 理 及 实 现, 并 将 其 应 用 到 高 校 网 站 通 用 管 理 系 统 的 文 件 发 布 模 块 和 类 文 件 加 密 中, 实 现 了 基 于 网 站 通 用 管 理 平 台 建 设 新 的 二 级 网 站 的 热 插 拔 扩 展, 有 效 的 平 衡 了 平 台 的 扩 展 性 和 稳 定 性 之 间 的 关 系, 达 到 了 实 现 高 校 二 级 部 门 网 站 系 统 易 扩 展 部 署 方 便 等 目 的. 1 Java 类 加 载 器 的 层 次 体 系 架 构 Java 中 的 所 有 类, 必 须 被 装 载 到 jvm 中 才 能 运 行, 这 个 装 载 工 作 是 由 jvm 中 的 类 加 载 器 完 成 的, 类 加 载 1 收 稿 时 间 :2012-12-26; 收 到 修 改 稿 时 间 :2013-01-21 Research and Development 研 究 开 发 187

计 算 机 系 统 应 用 http://www.c-s-a.org.cn 2013 年 第 22 卷 第 7 期 器 所 做 的 工 作 实 质 是 把 类 文 件 从 硬 盘 读 取 到 内 存 中. 对 于 Java 中 的 类 大 致 可 以 分 为 三 种 : Java 系 统 核 心 类 扩 展 类 和 由 程 序 员 自 定 义 的 类. jvm 的 类 加 载 器 也 至 少 有 三 种 : Bootstrap classloader ExtClassLoader 和 AppClassLoader, 分 别 负 责 加 载 Java 系 统 核 心 类, 扩 展 类 和 程 序 员 定 义 的 应 用 类. Bootstrap classloader 是 系 统 中 唯 一 的 用 编 写 虚 拟 机 的 语 言 编 写 的 类 加 载 器. 如 果 JVM 是 用 C/C++ 实 现 的, 则 Bootstrap classloader 也 是 用 C/C++ 编 写, 在 Java 中 Bootstrap ClassLoader 用 null 表 示 [2]. Bootstrap Loader 用 默 认 方 式 从 JRE 中 加 载 Java 运 行 环 境 提 供 的 所 有 核 心 类, 如 JRE 目 录 下 的 rt.jar, charsets.jar 等. 这 些 类 是 所 有 应 用 程 序 必 须 的, 因 此 不 是 即 用 即 装, 而 是 首 先 装 入 并 永 驻 JVM, 直 至 JVM 退 出 的. 类 加 载 器 实 质 上 也 是 Java 类, 因 为 Java 类 的 类 加 载 器 本 身 也 要 被 类 加 载 器 加 载, 显 然 必 须 要 第 一 个 类 加 载 器 本 身 不 是 Java 类, 这 正 是 Bootstrap 根 引 导 类 加 载 器. Java 核 心 类 之 外 的 类 是 由 ExtClassLoader 和 AppClassLoader 来 完 成 加 载 的. ExtClassLoader 负 责 装 载 JRE 扩 展 目 录 ext 下 的 jar 类 包 ; AppClassLoader 负 责 装 载 classpath 路 径 下 的 类 包. JVM 中 的 所 有 类 加 载 器 采 用 具 有 父 子 关 系 的 树 形 结 构 进 行 组 织, 即 根 加 载 器 是 ExtClassLoader 的 父 加 载 器, ExtClassLoader 是 AppClassLoader 的 父 加 载 器. 在 程 序 员 不 显 示 指 定 类 加 载 器 的 情 况 下 使 用 AppClassLoader 装 载 应 用 程 序 的 类. 除 了 JVM 默 认 的 三 个 加 载 器 以 外, 第 三 方 可 以 编 写 自 己 的 类 加 载 器, 以 实 现 一 些 特 殊 的 需 求, 例 如, 对 特 定 目 录 的 类 进 行 加 密, 只 有 用 我 们 自 己 的 类 加 载 器 才 能 解 密 并 加 载. 2 Java 动 态 类 加 载 机 制 原 理 JVM 解 释 字 节 码, 必 须 通 过 加 载 连 接 和 初 始 化 三 个 步 骤 : (1) 加 载 : 类 装 载 就 是 寻 找 类 或 接 口 字 节 码 文 件 进 行 解 析 并 构 造 JVM 内 部 对 象 表 示 的 组 件. (2) 连 接 : 连 接 是 把 已 经 加 载 的 二 进 制 数 据 合 并 到 虚 拟 机 的 运 行 时 状 态 中 去, 包 括 检 查 准 备 和 解 析 三 个 子 阶 段, 其 中 解 析 步 骤 是 可 以 选 择 的. (a) 检 查 : 检 查 载 入 的 class 文 件 数 据 的 正 确 性 ; (b) 准 备 : 为 类 的 静 态 变 量 分 配 存 储 空 间 ; (c) 解 析 : 将 符 号 引 用 转 成 直 接 引 用. (3) 初 始 化 : 对 静 态 变 量, 静 态 代 码 块 执 行 初 始 化 工 作. 如 图 1 所 示. 图 1 Java 类 的 加 载 与 连 接 过 程 由 上 一 节 可 知, JVM 运 行 时 至 少 会 产 生 三 个 类 加 载 器 : Bootstrap ClassLoader, Ext ClassLoader 和 App ClassLoader, 当 一 个 类 需 要 加 载 运 行 时, 为 了 协 调 多 个 类 加 载 器 工 作, Java 对 类 加 载 器 进 行 了 分 工 和 分 级, 不 同 级 别 的 类 加 载 器 负 责 加 载 不 同 的 类, JVM 采 用 基 于 类 加 载 器 层 次 关 系 的 全 盘 负 责 双 亲 委 托 模 型 机 制 实 现 按 需 加 载, 简 单 讲, 就 是 类 加 载 器 有 载 入 类 的 需 求 时, 会 先 请 示 其 父 类 加 载 器 使 用 其 搜 索 路 径 来 载 入, 如 果 父 类 加 载 器 找 不 到, 才 由 自 己 的 类 加 载 器 依 照 自 己 的 搜 索 路 径 搜 索 类, 该 搜 索 过 程 具 有 递 归 性. 全 盘 负 责 是 指 当 一 个 加 载 器 装 载 一 个 类 时, 除 非 显 式 的 使 用 另 外 一 个 加 载 器, 该 类 所 依 赖 及 引 用 的 类 也 由 这 个 加 载 器 载 入. 假 如 类 A 和 类 B 相 关 联, 当 JVM 加 载 类 A 后, 系 统 也 会 使 用 同 一 个 类 加 载 器 加 载 类 B. 关 联 的 种 类 有 很 多, 例 如 类 A 继 承 类 B, 又 例 如 类 A 的 方 法 中 创 建 了 类 B 的 实 例 等. 委 托 模 型 是 指, 当 一 个 加 载 器 被 请 求 装 载 某 个 类 时, 首 先 在 本 类 加 载 器 中 检 查 要 加 载 的 类 是 否 已 经 加 载, 如 果 加 载 了 就 直 接 返 回 以 前 加 载 过 的 这 个 类 对 象. 如 果 这 个 类 未 被 本 类 加 载 器 加 载 过, 那 么 它 把 这 个 类 名 交 给 它 的 父 类 加 载 器, 委 托 父 类 加 载 器 去 加 载. 若 父 加 载 器 能 装 载, 则 返 回 这 个 类 所 对 应 的 class 对 象, 否 则 继 续 向 上 级 提 交, 一 直 到 根 引 导 类 加 载 器, 显 然 这 是 一 个 递 归 的 调 用. 只 有 在 根 引 导 类 加 载 器 都 不 能 加 载 的 情 况 下 才 从 自 己 的 类 路 径 中 查 找 并 装 载 目 标 类. 这 一 点 是 从 安 全 方 面 考 虑 的, 试 想 如 果 一 个 人 写 了 一 个 恶 意 的 基 础 类 ( 如 java.lang.string) 并 加 载 到 JVM 将 会 引 起 严 重 的 后 果, 但 有 了 委 托 模 型, java.lang.string 永 远 是 由 根 加 188 研 究 开 发 Research and Development

载 器 来 装 载, 避 免 以 上 情 况 发 生 [3]. 全 盘 负 责 双 亲 委 托 模 型 机 制 如 图 2 所 示. 图 2 JVM 动 态 类 加 载 的 委 托 模 型 示 意 图 每 个 类 加 载 器 都 可 以 用 来 加 载 类, 而 且 同 一 个 类 可 以 在 不 同 的 类 加 载 器 中 多 次 加 载, 但 在 同 一 个 类 加 载 器 上 就 只 允 许 加 载 一 次. 这 是 因 为 当 类 加 载 器 加 载 一 个 类 之 前 会 先 检 查 这 个 类 是 否 被 本 类 加 载 器 加 载 过. 因 此, 在 JVM 中, 每 个 被 加 载 的 类 都 由 两 个 参 数 来 确 定, 一 个 是 类 的 名 字, 还 有 一 个 是 加 载 这 个 类 的 类 加 载 器 [4]. 类 文 件 被 装 载 解 析 后, 在 虚 拟 机 中 都 有 一 个 对 应 的 java.lang.class 对 象, 提 供 了 类 结 构 信 息 的 描 述, 且 每 个 Class 对 象 都 包 含 一 个 对 定 义 它 的 ClassLoader 的 引 用. 数 组 及 基 本 数 据 类 型, 甚 至 void 都 拥 有 对 应 的 Class 对 象. Class 类 没 有 public 的 构 造 方 法, Class 对 象 是 在 装 载 类 时 由 JVM 通 过 调 用 类 加 载 器 中 的 defineclass() 方 法 自 动 构 造 的. 3 Java 动 态 类 加 载 的 实 现 类 在 JVM 中 的 加 载 方 式 分 为 两 种 : 一 是 隐 式 加 载, 程 序 在 运 行 过 程 中 当 执 行 到 通 过 new 等 方 式 生 成 对 象 时, 隐 式 调 用 类 加 载 器 加 载 对 应 的 类 到 JVM 中 ; 二 是 显 式 装 载, 由 程 序 员 调 用 自 定 义 的 类 装 载 器 把 需 要 的 类 加 载 到 内 存 当 中, 其 方 式 又 分 为 两 种 : 一 是 通 过 Class.forName() 方 法, 二 是 由 类 java.lang.classloader 的 方 法 loadclass() 提 供. 显 式 加 载 大 大 提 高 了 程 序 的 灵 活 性. 自 定 义 类 加 载 器 可 以 从 Java.lang.ClassLoader 的 任 何 子 类 创 建 ( 可 以 从 构 造 方 法 ClassLoader (ClassLoader parent) 可 以 看 出, 需 要 指 定 一 个 父 加 载 器, 创 建 后 即 挂 到 JVM 加 载 器 层 次 树 中 ). 任 何 类 的 加 载 都 是 通 过 抽 象 类 ClassLoader 类 及 其 子 类 来 实 现 的, 它 是 Java 核 心 API 的 一 部 分, 属 于 Java.lang 包, 所 有 自 定 义 类 加 载 器 必 须 继 承 并 实 例 化 该 类. 重 要 方 法 有 [5] : (1) Class loadclass(string name, boolean resolve) : name 参 数 指 定 类 加 载 器 需 要 装 载 类 的 全 限 定 类 名. resolve 参 数 指 定 类 加 载 器 是 否 解 析 该 类. 在 初 始 化 类 之 前 应 考 虑 进 行 类 解 析 的 工 作, 但 并 不 是 所 有 的 类 都 需 要 解 析. 该 方 法 使 用 委 托 机 制 来 加 载 类. 首 先 它 执 行 findloadedclass 方 法, 在 本 类 加 载 器 中 检 查 要 加 载 的 类 是 否 己 经 加 载, 如 果 加 载 了 就 直 接 返 回 以 前 加 载 过 的 这 个 类 对 象. 否 则, 委 托 父 加 载 器 去 加 载 ( 调 用 loadclass 方 法 ), 最 后 调 用 findclass(string) 方 法 查 找 类. (2) Class findclass(string name): 使 用 指 定 的 二 进 制 名 称 查 找 类. 在 通 过 父 类 加 载 器 检 查 所 请 求 的 类 后, 此 方 法 将 被 loadclass 方 法 调 用. loadclass 的 缺 省 实 现 调 用 这 个 方 法, 并 可 以 通 过 覆 盖 来 定 制 它. 比 如 自 定 义 加 载 器, 首 先 继 承 抽 象 类 ClassLoader, 然 后 不 必 重 写 loadclass 方 法, 只 需 重 写 findclass 方 法 即 可, 这 样 自 定 义 的 加 载 器 仍 然 按 照 委 托 模 型 来 加 载 类. 这 种 设 计 模 式 属 于 模 板 方 法 设 计 模 式. (3) Class defineclass(string name, byte[] b, int off, int len): 该 方 法 将 一 个 字 节 数 组 转 换 为 类 的 字 节 码. (4) Class findsystemclass(string name) : 此 方 法 通 过 系 统 类 加 载 器 来 加 载 该 类 文 件, 如 果 存 在, 就 使 用 defineclass 将 原 始 字 节 转 换 成 Class 对 象, 以 将 该 文 件 转 换 成 类. (5) Class findloadedclass(string name), 如 果 Java 虚 拟 机 已 将 此 加 载 器 记 录 为 具 有 给 定 二 进 制 名 称 的 某 个 类 的 加 载 器, 则 返 回 该 二 进 制 名 称 的 类. 动 态 类 加 载 最 直 接 方 式 是 使 用 Java.lang.Class 的 forname() 方 法, 它 有 两 种 重 载 形 式 : public static Class<?> forname(string classname) throws ClassNotFoundException public static Class<?> forname(string name, boolean initialize, ClassLoader loader) 使 用 给 定 的 类 加 载 器 ( 第 三 个 参 数 指 定 ), 返 回 与 带 有 给 定 字 符 串 名 的 类 或 接 口 ( 第 一 个 参 数 指 定 ) 相 关 联 的 Class 对 象. 第 二 个 参 数 指 定 表 示 是 否 被 初 始 化. Class.forName("Foo") 等 效 于 : Class.forName("Foo",true,this.getClass().getClassL oader()) 实 现 动 态 类 加 载, 使 用 forname() 还 是 调 用 用 户 自 定 义 类 加 载 器 loadclass() 方 法 取 决 于 用 户 的 需 要. Research and Development 研 究 开 发 189

计 算 机 系 统 应 用 http://www.c-s-a.org.cn 2013 年 第 22 卷 第 7 期 一 般 情 况 下 使 用 forname(), 因 为 它 是 动 态 类 加 载 最 直 接 的 方 法. 另 外, 若 需 要 请 求 的 类 型 在 加 载 时 就 初 始 化, 则 不 得 不 使 用 forname() 方 法. 自 定 义 类 加 载 器 可 以 满 足 一 些 forname() 无 法 满 足 的 需 求. 如 从 网 络 上 下 载, 从 数 据 库 中 获 取, 从 加 密 文 件 中 提 取, 甚 至 动 态 地 创 建 它 们, 这 时 就 需 要 自 定 义 类 加 载 器. 创 建 自 定 义 类 加 载 器, 主 要 原 因 是 可 以 用 定 制 的 方 式 把 类 型 的 全 限 定 名 转 换 成 一 个 Java class 文 件 格 式 的 字 节 数 组, 并 使 用 自 定 义 类 加 载 器 而 不 是 forname() 方 法 对 代 码 安 全 性 进 行 保 护 [6]. 4 应 用 实 例 Java 语 言 的 类 加 载 器 功 能 非 常 强 大, 可 以 通 过 继 承 ClassLoader 类 并 重 载 类 方 法 来 实 现 一 些 控 制 程 序 加 载 过 程 的 功 能. 本 节 将 Java 动 态 类 加 载 机 制 应 用 到 高 校 二 级 网 站 管 理 系 统 的 文 件 发 布 模 块 中, 并 采 用 自 定 义 加 载 器 来 加 载 已 经 加 密 过 的 Java 类 文 件. 4.1 系 统 应 用 需 求 当 前 大 部 分 高 校 由 于 没 有 构 建 统 一 的 网 站 通 用 平 台, 各 高 校 的 二 级 部 门 各 自 为 阵, 将 大 量 人 力 和 物 力 花 在 网 站 的 重 复 建 设 上, 而 且 各 高 校 二 级 学 院 网 站 的 风 格 不 统 一 效 果 差, 不 利 于 展 示 高 校 的 整 体 形 象. 因 此, 构 建 一 个 高 校 网 站 通 用 平 台 应 用 于 高 校 的 各 个 二 级 学 院 具 有 非 常 重 要 的 意 义. 由 于 高 校 各 部 门 网 站 的 功 能 大 致 是 类 似 的, 如 权 限 管 理 栏 目 管 理 新 闻 管 理 等, 所 以 在 开 发 好 网 站 通 用 管 理 平 台 后, 如 果 要 建 设 一 个 二 级 部 门 网 站, 技 术 人 员 可 以 先 做 好 静 态 网 页, 然 后 在 通 用 管 理 平 台 中 为 二 级 网 站 分 配 栏 目, 公 共 功 能 之 外 的 个 性 差 异 需 求 通 过 文 件 发 布 模 块 以 可 插 拔 的 方 式 发 布 到 通 用 管 理 平 台 中, 经 过 简 单 的 配 置 即 可 完 成 一 个 二 级 部 门 网 站 的 建 设. 文 件 发 布 模 块 的 主 要 功 能 是 对 某 二 级 网 站 的 静 态 页 面 动 态 化, 使 得 设 计 好 的 静 态 网 页 和 后 台 管 理 系 统 相 关 联. 通 过 灵 活 的 发 布 模 块, 增 加 了 系 统 的 可 扩 展 性 灵 活 性 和 降 低 了 系 统 模 块 之 间 的 耦 合 性, 再 对 发 布 的 文 件 代 码 进 行 加 密 处 理, 增 强 了 系 统 安 全 性. 4.2 模 块 实 现 本 系 统 采 用 基 于 MVC 模 式 的 struts2 框 架 实 现. 文 件 发 布 模 块 需 要 完 成 以 下 工 作 : (1) 创 建 二 级 网 站 主 页 的 HomepageAction 类, 这 是 一 个 Struts2 Action, 负 责 获 取 主 页 栏 目 信 息 并 以 把 数 据 封 装 在 集 合 中 返 回, 在 视 图 层 采 用 struts2 标 签 展 示 出 来. 这 也 是 各 个 部 门 的 个 性 差 异 部 分. (2) 添 加 struts2 配 置 文 件 : 配 置 Action, 添 加 逻 辑 视 图 和 物 理 视 图 资 源 之 间 的 映 射. (3) 为 保 证 代 码 安 全 性, 需 要 对 上 传 代 码 进 行 加 密 处 理. 因 当 前 JVM 中 正 在 运 行 的 是 网 站 通 用 管 理 平 台, 对 于 为 每 个 部 门 主 页 提 交 的 Homepage 类 是 系 统 预 先 不 知 道 的 类 型, 并 且 对 于 编 译 后 的 class 文 件 进 行 加 密 处 理 后, 必 须 使 用 自 定 义 加 载 器 加 载 自 定 目 录 下 的 类 文 件 并 解 密, 否 则 就 不 能 正 确 解 析 原 来 的 类. (1) 实 现 代 码 加 密 的 自 定 义 加 载 器 源 代 码 如 下 : public class MyClassLoader extends ClassLoader{ private String classdir; // 需 要 类 加 载 器 加 载 的 类 文 件 的 目 录 public MyClassLoader(){ public MyClassLoader(String classdir){ super( null) ; / / 设 定 父 类 加 载 器 为 null this.classdir = classdir; @Override // / 重 写 父 类 的 findclass( ) 方 法, 用 于 按 照 用 户 自 定 义 要 求 实 现 类 的 加 载 protected Class<?> findclass(string name) throws ClassNotFoundException { String classfilename = classdir + "\\" + name.substring(name.lastindexof('.')+1) + ".class"; try { FileInputStream fis = new FileInputStream(classFileName); ByteArrayOutputStream bos = new ByteArrayOutputStream(); decrypt(fis,bos); // 解 密 处 理 方 法 fis.close(); byte[] bytes = bos.tobytearray(); return defineclass(bytes, 0, bytes.length); catch (Exception e) { e.printstacktrace(); return null; (2) 设 计 文 件 发 布 方 法. 设 计 deploymodule(string 190 研 究 开 发 Research and Development

name) 方 法 从 数 据 库 读 取 并 生 成 类 文 件 的 方 法, 其 部 分 源 码 如 下 : public void deploymodule ( string classdir ) throws ClassNotFoundException { Class clazz = new MyClassLoader(classdir). loadclass("cn.com.homepageaction"); Object o = (Object )clazz.newinstance(); / / 创 建 对 象, 利 用 Java 反 射 机 制 解 析 类 文 件 中 的 方 法 5 结 语 Java 动 态 类 加 载 是 Java 程 序 具 有 动 态 性 的 关 键 机 制, 也 是 JVM 的 一 项 核 心 技 术. 本 文 分 析 了 Java 类 加 载 器 的 体 系 结 构 动 态 类 加 载 机 制 的 原 理 实 现 技 术, 并 把 Java 类 加 载 机 制 应 用 到 高 校 部 门 网 站 通 用 管 理 平 台 中 的 文 件 发 布 模 块 和 加 密 类 文 件 加 载 中, 实 现 了 基 于 网 站 通 用 管 理 平 台 建 设 新 的 二 级 网 站 的 热 插 拔 扩 展, 使 得 平 台 具 有 更 好 的 扩 展 性 和 代 码 的 可 重 用 性, 对 加 密 后 的 字 节 码 只 能 用 自 定 义 加 载 器 进 行 解 密 并 加 载, 实 现 一 定 意 义 上 的 类 文 件 安 全. Java 动 态 类 加 载 机 制 的 应 用 还 有 很 多, Java 中 RMI( 远 程 方 法 调 用 ) 就 是 Java 动 态 类 加 载 机 制 的 一 个 典 型 应 用, 而 这 是 一 般 类 加 载 器 无 法 实 现, 只 有 通 过 自 定 义 加 载 策 略, 才 能 完 美 实 现 这 样 的 需 求. 参 考 文 献 1 左 天 军, 朱 智 林, 韩 俊 刚, 陈 平.Java 动 态 类 加 载 分 析. 计 算 机 科 学,2005,32(4):194 196. 2 周 志 明. 深 入 理 解 Java 虚 拟 机 :JVM 高 级 特 性 与 最 佳 实 践. 北 京 : 机 械 工 业 出 版 社,2010.191 197. 3 邓 洋 春.Java 虚 拟 机 关 键 机 制 研 究 与 实 践. 长 沙 : 中 南 大 学, 2009:3 28. 4 张 敦 华, 刘 建.Java 动 态 加 载 机 制 及 其 应 用. 计 算 机 工 程 与 设 计,2004,25( 3):432 441. 5 JDK6.0 API 文 档.http://docs.oracle.com/javase/6/docs/api/ index.html. 6 王 万 森, 龚 文.Java 动 态 类 加 载 机 制 研 究 及 应 用. 计 算 机 工 程 与 设 计,2011,32(6):2154 2158. ( 上 接 第 199 页 ) 3 龙 德 帆, 樊 尚 春, 庞 宏 冰. 用 于 原 木 材 积 检 测 的 图 像 处 理 与 分 析 算 法. 北 京 航 空 航 天 大 学 学 报,2005,31(1):82 85. 4 景 林, 黄 习 培. 成 捆 原 木 计 算 机 图 像 检 尺 系 统 研 究 及 应 用 计 算 机 应 用,2006,26(z2):137 139. 5 黄 习 培, 景 林. 原 木 端 面 图 像 检 尺 直 径 识 别 算 法 的 研 究. 林 业 机 械 与 木 工 设 备,2006,34(1):24 26. 6 Kass M, et al. Snakes: Active Contour Models. International Journal of Computer Vision, 1987,1(4):321 331. 7 Xu CY, et al. Snakes, shapes, and gradient vector flow. IEEE Trans. on Image Processing, 1998,7(3):359 369. 8 Li CM, et al. Level set evolution without re-initialization: A new variational formulation. IEEE Conference on Computer Vision and Pattern Recognition(CVPR05). 2005,1:433 436. 9 Rochery M, et al. Higher Order Active Contours. International Journal of Computer Vision, 2006,69(1):27 42. 10 Horváth P, et al. A higher-order active contour model of a gas of circles ' and its application to tree crown extraction, Pattern Recognition, 2009,42(5):699 709. 11 Li CM, et al. Minimization of Region-Scalable Fitting Energy for Image Segmentation. IEEE Trans. on Image Processing, 2008,17(10):1940 1949. 12 Zhu GP, et al. Gradient vector flow active contours with prior directional information, Pattern Recognition Letters, 2010,31(9):845 856. 13 Hough PVC. A method and means for recognizing complex patterns, U.S. Patent 3, 069, 654. 14 Chung KL, et al. Speed up the computation of randomized algorithms for detecting lines, circles, and ellipses using novel tuning and LUT-based voting platform. Applied Mathematics and Computation, 2007,190(1):132 149. Research and Development 研 究 开 发 191