Preface 本 书 涵 盖 了 Java Native Interface(JNI) 的 内 容, 将 探 讨 以 下 问 题 : 在 一 个 Java 项 目 中 集 成 一 个 C/C++ 库 在 一 个 用 C/C++ 开 发 的 项 目 中, 嵌 入 JavaVM 实 现 Java VM
|
|
- 小灞 释
- 7 years ago
- Views:
Transcription
1 前 言 翻 译 初 衷, 记 录 JNI 编 程 经 验 以 备 后 查, 并 奢 望 以 JNI 为 蓝 本, 写 一 本 更 深 入 的 关 于 虚 拟 机 的 书 真 做 起 来, 才 发 现 以 现 有 水 平 只 能 仰 望 这 个 目 标, 要 达 到 它, 还 需 要 几 年 积 累 本 书 没 有 采 用 逐 字 逐 句 的 翻 译, 更 多 采 用 意 译, 请 大 家 在 阅 读 时 多 参 考 原 著 ; 对 于 书 中 夹 杂 的 评 论, 如 有 伤 观 感, 请 大 家 见 谅 现 在 有 无 数 优 秀 的 开 源 项 目, 以 前 高 深 莫 测 的 技 术 ( 虚 拟 机 编 译 器 操 作 系 统 协 议 栈 和 IDE...), 我 们 终 于 有 机 会 一 探 究 竟 了, 真 令 人 兴 奋 我 们 学 习, 我 们 参 与, 希 望 有 一 天 我 们 中 国 人 也 能 创 一 门 牛 技 术 感 谢 Die...ken 的 审 稿, 他 严 谨 和 认 真 的 态 度, 深 感 敬 佩 ; 哥 们 儿 祝 你 : 天 天 开 心, 早 结 连 理 感 谢 老 婆 老 婆 读 书 时, 看 见 别 人 写 的 书 总 会 感 谢 太 太 云 云, 煞 是 羡 慕, 总 追 问 : 你 什 么 时 候 写 书 感 谢 我? 难! 翻 译 都 这 么 费 劲, 写 书 就 不 知 猴 年 马 月 了, 在 这 儿 感 谢 一 下, 糊 弄 糊 弄 得 了 do.chuan@gmail.com
2 Preface 本 书 涵 盖 了 Java Native Interface(JNI) 的 内 容, 将 探 讨 以 下 问 题 : 在 一 个 Java 项 目 中 集 成 一 个 C/C++ 库 在 一 个 用 C/C++ 开 发 的 项 目 中, 嵌 入 JavaVM 实 现 Java VM 语 言 互 操 作 性 问 题, 特 别 是 互 操 作 过 程 中 的 垃 圾 回 收 (GC, garbage collection) 和 并 发 编 程 (multithreading) 译 注 : JNI(Java Native Interface) 是 SUN 定 义 的 一 套 标 准 接 口, 如 Dalvik, Apache Harmony 项 目... 等 Java 虚 拟 机, 都 会 实 现 JNI 接 口, 供 本 地 (C/C++) 应 用 与 Java VM 互 调 JNI: 可 以 供 Java 代 码 调 用 本 地 代 码, 本 地 代 码 也 可 以 调 用 Java 代 码, 即 上 文 列 出 的 第 4 条 内 容 : 语 言 互 操 作 ; 所 以, 这 是 一 套 完 善 而 功 能 强 大 的 接 口 可 能 有 朋 友 听 说 过 KNI, 那 是 J2ME VM(CLDC) 中 定 义 的 一 套 东 西, 不 如 JNI 强 大 此 外, 因 为 C/C++ 在 系 统 编 程 领 域 的 地 位, 只 要 打 通 了 与 C/C++ 的 接 口, 就 等 于 是 天 堑 变 通 途 首 先, 通 过 本 书, 你 会 很 容 易 的 掌 握 JNI 开 发, 并 能 了 解 到 方 方 面 面 的 关 于 JNI 的 知 识 本 书 详 尽 的 叙 述, 会 带 给 你 你 很 多 如 何 高 效 使 用 JNI 的 启 示 JNI 自 1997 年 初 发 布 以 来, Sun 的 工 程 师 们 和 Java 社 区 使 用 JNI 的 经 验 造 就 了 本 书 第 二, 本 书 介 绍 了 JNI 的 设 计 原 理 这 些 原 理, 不 仅 会 使 学 术 界 感 兴 趣, 也 是 高 效 使 用 JNI 的 前 提 第 三, 本 书 的 某 些 部 分 是 Java 2 平 台 规 范 的 最 终 版 本 JNI 程 序 员 可 以 此 书 作 为 规 范 的 参 考 手 册,Java 虚 拟 机 实 现 者 必 须 遵 循 规 范, 以 保 证 各 平 台 实 现 的 一 致 性 (... 几 段 不 重 要, 未 翻 译...)
3 CHAPTER 1 Introduction JNI 是 Java 平 台 中 的 一 个 强 大 特 性 应 用 程 序 可 以 通 过 JNI 把 C/C++ 代 码 集 成 进 Java 程 序 中 通 过 JNI, 开 发 者 在 利 用 Java 平 台 强 大 功 能 的 同 时, 又 不 必 放 弃 对 原 有 代 码 的 投 资 ; 因 为 JNI 是 Java 平 台 定 义 的 规 范 接 口, 当 程 序 员 向 Java 代 码 集 成 本 地 库 时, 只 要 在 一 个 平 台 中 解 决 了 语 言 互 操 作 问 题, 就 可 以 把 该 解 决 方 案 比 较 容 易 的 移 植 到 其 他 Java 平 台 中 译 注 : 比 如 为 Dalvik 添 加 了 一 个 本 地 库, 也 可 以 把 这 个 本 地 库 很 容 易 的 移 植 到 J2SE 和 Apache Harmony 中, 因 为 在 Java 与 C/C++ 互 操 作 方 面, 大 家 都 遵 循 一 套 API 接 口, 即 JNI 本 书 由 下 列 三 个 部 分 组 成 : Chapter 2 通 过 简 单 示 例 介 绍 了 JNI 编 程 Chapter 3-10, 对 JNI 各 方 面 特 性 和 功 能 做 介 绍, 并 给 出 示 例 ( 译 者 : 重 要 ) Chapters 11-13, 罗 列 JNI 所 有 的 数 据 类 型 的 定 义 (... 几 段 不 重 要, 未 翻 译...) 1.1 The Java Platform and Host Environment 因 本 书 覆 盖 了 Java 和 本 地 (C, C++, etc...) 编 程 语 言, 让 我 们 首 先 理 一 理 这 些 编 程 语 言 的 适 用 领 域 Java 平 台 (Java Platform) 的 组 成 :Java VM 和 Java API. Java 应 用 程 序 使 用 Java 语 言 开 发, 然 后 编 译 成 与 平 台 无 关 的 字 节 码 (.class 文 件 ) Java API 由 一 组 预 定 义 的 类 组 成 任 何 组 织 实 现 的 Java 平 台 都 要 支 持 :Java 编 程 语 言, 虚 拟 机, 和 API( 译 者 :Sun 对 Java 语 言 虚 拟 机 和 API 有 明 确 规 范 ) 平 台 环 境 : 操 作 系 统, 一 组 本 机 库, 和 CPU 指 令 集 本 地 应 用 程 序, 通 常 依 赖 于 一 个 特 定 的 平 台 环 境, 用 C C++ 等 语 言 开 发, 并 被 编 译 成 平 台 相 关 的 二 进 制 指 令, 目 标 二 进 制 代 码 在 不 同 OS 间 一 般 不 具 有 可 移 植 性
4 Java 平 台 (Java VM 和 Java API) 一 般 在 某 个 平 台 下 开 发 比 如,Sun 的 Java Runtime Environment(JRE) 支 持 类 Unix 和 Windows 平 台. Java 平 台 做 的 所 有 努 力, 都 为 了 使 程 序 更 具 可 移 植 性 1.2 Role of the JNI 当 Java 平 台 部 署 到 本 地 系 统 中, 有 必 要 做 到 让 Java 程 序 与 本 地 代 码 协 同 工 作 部 分 是 由 于 遗 留 代 码 ( 保 护 原 有 的 投 资 ) 的 问 题 ( 一 些 效 率 敏 感 的 代 码 用 C 实 现, 但 现 在 JavaVM 的 执 行 效 率 完 全 可 信 赖 ), 工 程 师 们 很 早 就 开 始 以 C/C++ 为 基 础 构 建 Java 应 用, 所 以,C/C++ 代 码 将 长 时 间 的 与 Java 应 用 共 存 JNI 让 你 在 利 用 强 大 Java 平 台 的 同 时, 使 你 仍 然 可 以 用 其 他 语 言 写 程 序 作 为 JavaVM 的 一 部 分,JNI 是 一 套 双 向 的 接 口, 允 许 Java 与 本 地 代 码 间 的 互 操 作 如 图 1.1 所 示 作 为 双 向 接 口,JNI 支 持 两 种 类 型 本 地 代 码 : 本 地 库 和 本 地 应 用 用 本 地 代 码 实 现 Java 中 定 义 的 native method 接 口, 使 Java 调 用 本 地 代 码 通 过 JNI 你 可 以 把 Java VM 嵌 到 一 个 应 用 程 序 中, 此 时 Java 平 台 作 为 应 用 程 序 的 增 强, 使 其 可 以 调 用 Java 类 库 比 如, 在 浏 览 器 中 运 行 Applet, 当 浏 览 器 遇 到 "Applet" 标 签, 浏 览 器 就 会 把 标 签 中 的 内 容 交 给 Java VM 解 释 执 行, 这 个 实 现, 就 是 典 型 的 把 JavaVM 嵌 入 Browser 中 译 注 : JNI 不 只 是 一 套 接 口, 还 是 一 套 使 用 规 则 Java 语 言 有 "native" 关 键 字, 声 明 哪 些 方 法
5 是 用 本 地 代 码 实 现 的. 翻 译 的 时 候, 对 于 "native method", 根 据 上 下 文 意 思 做 了 不 同 处 理, 当 native method 指 代 Java 中 用 "native" 关 键 字 修 饰 的 那 些 方 法 时, 不 翻 译 ; 而 当 代 码 用 C/C++ 实 现 的 部 分 翻 译 成 了 本 地 代 码 上 述, 在 应 用 中 嵌 入 Java VM 的 方 法, 是 用 最 少 的 力 量, 为 应 用 做 最 强 扩 展 的 不 二 选 择, 这 时 你 的 应 用 程 序 可 以 自 由 使 用 Java API 的 所 有 功 能 ; 大 家 有 兴 趣 可 以 读 一 读 浏 览 器 是 怎 么 扩 展 Applet 的, 或 者 读 一 读 Palm WebOS 的 东 西 译 者 最 近 一 年 都 在 做 这 件 事, 对 这 个 强 大 的 功 能, 印 象 特 别 深 刻. 我 们 整 个 小 组 做 了 两 个 平 台 的 扩 展, 设 计 编 码 测 试 和 debug 用 了 近 一 年 半 时 间, 代 码 量 在 行 左 右, 做 完 扩 展 后, 平 台 功 能 空 前 增 强 我 感 觉 做 软 件, 难 得 不 在 编 码, 难 在 开 始 的 设 计 和 后 期 的 测 试 调 试 和 优 化, 并 最 终 商 用, 这 就 要 求 最 终 产 品 是 一 个 强 大 而 稳 定 的 平 台, 达 到 此 目 标 是 个 旷 日 持 久 的 事. 看 看 Java,Windows,Linux,Qt,WebKit 发 展 了 多 少 年? 向 所 有 软 件 工 程 师 致 敬! 1.3 Implications of Using the JNI 请 记 住, 当 Java 程 序 集 成 了 本 地 代 码, 它 将 丢 掉 Java 的 一 些 好 处 首 先, 脱 离 Java 后, 可 移 植 性 问 题 你 要 自 己 解 决, 且 需 重 新 在 其 他 平 台 编 译 链 接 本 地 库 第 二, 要 小 心 处 理 JNI 编 程 中 各 方 面 问 题 和 来 自 C/C++ 语 言 本 身 的 细 节 性 问 题, 处 理 不 当, 应 用 将 崩 溃 一 般 性 原 则 : 做 好 应 用 程 序 架 构, 使 native methods 定 义 在 尽 可 能 少 的 几 个 类 里 译 注 : 学 习 JNI 编 程 是 个 漫 长 的 实 践 过 程, 会 碰 到 无 数 问 题 用 C/C++ 编 程, 常 见 问 题 有 内 存 泄 露, 指 针 越 界..., 此 外 使 用 了 JNI, 还 要 面 对 JavaVM 的 问 题 : 在 本 地 代 码 中 new 一 个 Java 对 象 后 期 望 在 本 地 代 码 中 维 护 此 对 象 的 引 用, 如 何 避 免 被 GC? Java 面 向 对 象 语 言 的 封 装 性 被 破 坏 了,Java 类 中 任 何 方 法 和 属 性 对 JNI 都 是 可 见 的, 不 管 它 是 public 的, 还 是 private/protected/package 的 对 LocalRef/GlobalRef 管 理 不 善, 会 引 发 Table Overflow Exception, 导 致 应 用 崩 溃 从 JNI 调 用 Java 的 过 程 不 是 很 直 观, 往 往 几 行 Java 代 码 能 搞 定 的 事 情, 用 JNI 实 现 却 要 几 百 行 虽 然, 有 这 样 多 问 题, 逃 避 不 了, 你 就 认 了 吧 经 过 一 段 时 间 的 实 践, 当 你 能 熟 练 处 理 这 些 问 题 时, 就 会, 眉 头 一 皱, 文 思 泉 涌, 指 尖 飞 舞, 瞬 间 几 百 行 代 码 诞 生 了, 一 个 make 全 部 编 译 通 过, 这 时 的 你 肯 定 已 经 对 JNI 上 瘾 了 When to Use the JNI 当 你 准 备 在 项 目 中 使 用 JNI 之 前, 请 先 考 虑 一 下 是 否 有 其 他 更 合 适 的 方 案 上 节 有 关 JNI 缺 点 的 介 绍, 应 该 引 起 你 足 够 的 重 视 这 里 介 绍 几 个 不 通 过 JNI 与 其 他 语 言 交 互 的 技 术 :
6 IPC 或 者 通 过 TCP/IP 网 络 方 案 ( Android ASE) 数 据 库 方 面, 可 以 使 用 JDBC 使 用 Java 的 分 布 式 对 象 技 术 : Java IDL API 译 注 : IPC 与 TCP/IP 是 常 用 的 基 于 协 议 的 信 息 交 换 方 案. 可 以 参 考 Android 上 的 Binder 和 ASE(Android Script Environment) 一 典 型 的 解 决 方 案 是,Java 程 序 与 本 地 代 码 分 别 运 行 在 不 同 的 进 程 中. 采 用 进 程 分 置 最 大 的 好 处 是 : 一 个 进 程 的 崩 溃, 不 会 立 即 影 响 到 另 一 个 进 程 但 是, 把 Java 代 码 与 本 地 代 码 置 于 一 个 进 程 有 时 是 必 要 的 如 下 : Java API 可 能 不 支 某 些 平 台 相 关 的 功 能 比 如, 应 用 程 序 执 行 中 要 使 用 Java API 不 支 持 的 文 件 类 型, 而 如 果 使 用 跨 进 程 操 作 方 式, 即 繁 琐 又 低 效 避 免 进 程 间 低 效 的 数 据 拷 贝 操 作 多 进 程 的 派 生 : 耗 时 耗 资 源 ( 内 存 ) 用 本 地 代 码 或 汇 编 代 码 重 写 Java 中 低 效 方 法 总 之, 如 果 Java 必 须 与 驻 留 同 进 程 的 本 地 代 码 交 互, 请 使 用 JNI 译 注 : 写 代 码 是 技 巧 和 艺 术, 看 你 想 在 设 计 上 下 多 大 功 夫. 比 如 : Chrome, 是 多 进 程 的 典 范, 她 的 简 洁 高 效, 令 人 叹 服 1.5 Evolution of the JNI 关 于 Java 应 用 程 序 如 何 与 本 地 代 码 互 操 作 的 问 题, 在 Java 平 台 早 期 就 被 提 了 出 来. JDK1.0 包 括 了 一 套 与 本 地 代 码 交 互 的 接 口 当 时 许 多 Java 方 法 和 库 都 依 赖 本 地 方 法 实 现 ( 如 java.io, java.net) 但 是,JDK release 1.0 有 两 个 主 要 问 题 : Java 虚 拟 机 规 范 未 定 义 对 象 布 局, 本 地 代 码 访 问 对 象 的 成 员 是 通 过 访 问 C 结 构 的 成 员 实 现 的 本 地 代 码 可 以 得 到 对 象 在 内 存 中 的 地 址, 所 以, 本 地 方 法 是 GC 相 关 的 为 解 决 上 述 问 题 对 JNI 做 了 重 新 设 计, 让 这 套 接 口 在 所 有 平 台 都 容 易 得 到 支 持 虚 拟 机 实 现 者 通 过 JNI 支 持 大 量 的 本 地 代 码 工 具 开 发 商 不 用 处 理 不 同 种 类 的 本 地 接 口 所 有 JNI 开 发 者 面 对 的 是 操 作 JavaVM 的 规 范 API
7 JNI 的 首 次 支 持 是 在 JDK release 1.1, 但 1.1 内 部 Java 与 本 地 代 码 的 交 互 仍 然 使 用 原 始 方 式 (JDK 1.0). 但 这 种 局 面, 没 有 持 续 很 久, 在 Java 2 SDK release 1.2 中 Java 层 与 本 地 代 码 的 交 互 部 分 用 JNI 重 写 了 作 为 JavaVM 规 范 的 一 部 分,Java 层 与 本 地 代 码 的 交 互, 都 应 通 过 JNI 实 现 1.6 Example Programs 本 书 注 重 JNI 编 程, 不 涉 及 如 何 通 过 第 三 方 工 具 简 化 该 过 程 ( 译 者 : 不 重 要, 未 翻 译 ) 请 从 官 网 下 载 本 书 的 示 例 代 码 :
8 CHAPTER 2 Getting Started 本 章 用 Hello World 示 例 带 你 领 略 JNI 编 程 2.1 Overview 准 备 过 程 : 1. 创 建 一 个 类 (HelloWorld.java) 2. 使 用 javac 编 译 该 类 3. 利 用 javah -jni 产 生 头 文 件 4. 用 本 地 代 码 实 现 头 文 件 中 定 义 的 方 法 5. Run
9 译 注 : 在 一 个 特 定 环 境 中, 写 本 地 实 现 的 过 程 是 不 同 的 ( 如 Android) javah 主 要 是 生 成 头 文 件 和 函 数 签 名 ( 每 个 方 法 和 成 员 都 有 签 名, 后 有 详 细 介 绍 ), 通 过 javah 学 习 如 何 正 确 的 写 法 注 意 : 如 上 述 HelloWorld.java, 编 译 后 的 文 件 为 HelloWorld.class, 用 $javah HelloWorld 来 产 生 头 文 件, 不 要 带 末 尾 的 ".class" 2.2 Declare the Native Method HelloWorld.java class HelloWorld private native void print(); public static void main(string[] args) new HelloWorld().print(); static System.loadLibrary("HelloWorld"); HelloWrold 类 首 先 声 明 了 一 个 private native print 方 法. static 那 几 行 是 本 地 库 在 Java 代 码 中 声 明 本 地 方 法 必 须 有 "native" 标 识 符,native 修 饰 的 方 法, 在 Java 代 码 中 只 作 为 声 明 存 在 在 调 用 本 地 方 法 前, 必 须 首 先 装 载 含 有 该 方 法 的 本 地 库. 如 HelloWorld.java 中 所 示, 置 于 static 块 中, 在 Java VM 初 始 化 一 个 类 时, 首 先 执 行 这 部 分 代 码, 这 可 保 证 调 用 本 地 方 法 前, 装 载 了 本 地 库 装 载 库 的 机 制, 后 有 介 绍 2.3 Compile the HelloWorld Class $javac HelloWorld.java 2.4 Create the Native Method Header File $javah -jni HelloWorld 译 者 :"-jni" 为 默 认 参 数, 可 有 可 无. 上 述 命 令, 生 成 HelloWorld.h 文 件. 关 键 部 分 如 下 :
10 JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *, jobject); 现 在, 请 先 忽 略 两 个 宏 :JNIEXPORT 和 JNICALL 你 会 发 现, 该 函 数 声 明, 接 受 两 个 参 数, 而 对 应 的 Java 代 码 对 该 函 数 的 声 明 没 有 参 数 第 一 个 参 数 是 指 向 JNIEnv 结 构 的 指 针 ; 第 二 个 参 数, 为 HelloWorld 对 象 自 身, 即 this 指 针 译 注 : JNIEnv 是 JNI 核 心 数 据 之 一, 地 位 非 常 崇 高, 所 有 对 JNI 的 调 用 都 要 通 过 此 结 构 2.5 Write the Native Method Implementation 必 须 根 据 javah 生 成 的 本 地 函 数 声 明 实 现 函 数, 如 下 : #include <jni.h> #include <stdio.h> #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj) printf("hello World!\n"); return; 请 注 意 :"jni.h" 文 件 必 须 被 包 含, 该 文 件 定 义 了 JNI 所 有 的 函 数 声 明 和 数 据 类 型 2.6 Compile the C Source and Create a Native Library 请 注 意, 生 成 的 本 地 库 的 名 字, 必 须 与 System.loadLibrary("HelloWorld"); 待 装 载 库 的 名 字 相 同 Solaris: $cc -G -I/java/include -I/java/include/solaris HelloWorld.c -o libhelloworld.so -G: 生 成 共 享 库 Win: $cl -Ic:\java\include -Ic:\java\include\win32 -MD -LD HelloWorld.c -FeHelloWorld.dll -MD: 保 证 与 Win32 多 线 程 C 库 连 接 ( 译 者 :Win 上 分 静 态 动 态 动 态 多 线 程...C 库 ) -LD: 生 成 动 态 链 接 库
11 2.7 Run the Program Solaris or Win: $java HelloWorld 输 出 : Hello World! 运 行 前, 必 须 保 证 连 接 器, 能 找 到 待 装 载 的 库, 不 然, 将 抛 如 下 异 常 : java.lang.unsatisfiedlinkerror: no HelloWorld in library path at java.lang.runtime.loadlibrary(runtime.java) at java.lang.system.loadlibrary(system.java) at HelloWorld.main(HelloWorld.java) 如,Solaris, 通 过 sh 或 ksh shell: $LD_LIBRARY_PATH=. $export LD_LIBRARY_PATH C shell: $setenv LD_LIBRARY_PATH. 在 Win 上, 请 保 证 待 装 载 库 在 当 前 位 置, 或 在 PATH 环 境 变 量 中 你 也 可 以 如 下 : java -Djava.library.path=. HelloWorld -D: 设 置 Java 平 台 的 系 统 属 性 此 时 JavaVM 可 以 在 当 前 位 置 找 到 该 库
12 CHAPTER 3 Basic Types, Strings, and Arrays JNI 编 程 中 常 被 提 到 的 问 题 是,Java 语 言 中 的 数 据 类 型 是 如 何 映 射 到 c/c++ 本 地 语 言 中 的 实 际 编 程 中, 向 函 数 传 参 和 函 数 返 回 值 是 很 普 遍 的 事 情 本 章 将 介 绍 这 方 面 技 术, 我 们 从 基 本 类 型 ( 如 int) 和 一 般 对 象 ( 如 String 和 Array) 开 始 介 绍. 其 他 内 容 将 放 在 下 一 章 介 绍 译 注 : JavaVM 规 范 中 称 int,char,byte 等 为 primitive types, 译 者 平 时 叫 惯 了 基 本 类 型, 所 以 翻 译 时 延 用 了 习 惯, 不 知 合 适 否 3.1 A Simple Native Method 扩 充 HelloWorld.java, 该 例 是 先 打 印 一 串 字 符, 然 后 等 待 用 户 的 输 入, 如 下 : class Prompt // native method that prints a prompt and reads a line private native String getline(string prompt); public static void main(string args[]) Prompt p = new Prompt(); String input = p.getline("type a line: "); System.out.println("User typed: " + input); static System.loadLibrary("Prompt"); Prompt.getLine 方 法 的 C 声 明 如 下 : JNIEXPORT jstring JNICALL Java_Prompt_getLine(JNIEnv *env, jobject this, jstring prompt); Native Method Arguments Java_Prompt_getLine 接 收 3 个 参 数 : JNIEnv 结 构 包 括 JNI 函 数 表
13 第 二 个 参 数 的 意 义 取 决 于 该 方 法 是 静 态 还 是 实 例 方 法 (static or an instance method) 当 本 地 方 法 作 为 一 个 实 例 方 法 时, 第 二 个 参 数 相 当 于 对 象 本 身, 即 this. 当 本 地 方 法 作 为 一 个 静 态 方 法 时, 指 向 所 在 类. 在 本 例 中,Java_Prompt_getLine 是 一 个 本 地 实 例 方 法 实 现, 所 以 jobject 指 向 对 象 本 身 译 注 : Java 语 言 中 类 与 对 象 的 联 系 与 区 别, 概 念 很 清 晰, 但 在 JNI 和 VM 中, 有 一 些 问 题 需 要 说 明, 后 有 专 门 文 章 阐 述 Mapping of Types 在 native method 中 声 明 的 参 数 类 型, 在 JNI 中 都 有 对 应 的 类 型. 在 Java 中 有 两 类 数 据 类 型 :primitive types, 如,int, float, char; 另 一 种 为 reference types, 如, 类, 实 例, 数 组 译 者 : 数 组, 不 管 是 对 象 数 组 还 是 基 本 类 型 数 组, 都 作 为 reference types 存 在, 并 有 专 门 的 JNI 方 法 取 数 组 中 每 个 元 素. Java 与 JNI 基 本 类 型 的 映 射 很 直 接, 如 下 : Java boolean byte char short int long float Native(jni.h) jboolean jbyte jchar jshort jint jlong jfloat
14 double jdouble 相 比 基 本 类 型, 对 象 类 型 的 传 递 要 复 杂 很 多 Java 层 对 象 作 为 opaque references( 指 针 ) 传 递 到 JNI 层 Opaque references 是 一 种 C 的 指 针 类 型, 它 指 向 JavaVM 内 部 数 据 结 构 使 用 这 种 指 针 的 目 的 是 : 不 希 望 JNI 用 户 了 解 JavaVM 内 部 数 据 结 构 对 Opaque reference 所 指 结 构 的 操 作, 都 要 通 过 JNI 方 法 进 行. 比 如,"java.lang.String" 对 象,JNI 层 对 应 的 类 型 为 jstring, 对 该 opaque reference 的 操 作 要 通 过 JNIEnv->GetStringUTFChars 进 行 译 注 : 一 定 要 按 这 种 原 则 编 程, 千 万 不 要 为 了 效 率 或 容 易 的 取 到 某 个 值, 绕 过 JNI, 直 接 操 作 opaque reference. JNI 是 一 套 完 善 接 口, 所 有 需 求 都 能 满 足 在 JNI 中 对 象 的 基 类 即 为 jobject. 为 方 便 起 见, 还 定 义 了 jstring,jclass, jobjectarray 等 结 构, 他 们 都 继 承 自 jobject 3.2 Accessing Strings 如 下 使 用 方 式 是 错 误 的, 因 为 jstring 不 同 于 C 中 的 char * 类 型 JNIEXPORT jstring JNICALL Java_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt) /* ERROR: incorrect use of jstring as a char* pointer */ printf("%s", prompt); Converting to Native Strings 使 用 对 应 的 JNI 函 数 把 jstring 转 成 C/C++ 字 串 JNI 支 持 Unicode/UTF-8 字 符 编 码 互 转 Unicode 以 16-bits 值 编 码 ;UTF-8 是 一 种 以 字 节 为 单 位 变 长 格 式 的 字 符 编 码, 并 与 7-bits ASCII 码 兼 容 UTF-8 字 串 与 C 字 串 一 样, 以 NULL('\0') 做 结 束 符, 当 UTF-8 包 含 非 ASCII 码 字 符 时, 以 '\0' 做 结 束 符 的 规 则 不 变 7-bit ASCII 字 符 的 取 值 范 围 在 之 间, 这 些 字 符 的 值 域 与 UTF-8 中 相 同 当 最 高 位 被 设 置 时, 表 示 多 字 节 编 码 如 下, 调 用 GetStringUTFChars, 把 一 个 Unicode 字 串 转 成 UTF-8 格 式 字 串, 如 果 你 确 定 字 串 只 包 含 7-bit ASCII 字 符 这 个 字 串 可 以 使 用 C 库 中 的 相 关 函 数, 如 printf. 如 何 操 作 non-ascii 字 符, 后 面 有 介 绍 JNIEXPORT jstring JNICALL
15 Java_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt) char buf[128]; const jbyte *str; str = (*env)->getstringutfchars(env, prompt, NULL); if (str == NULL) return NULL; /* OutOfMemoryError already thrown */ printf("%s", str); (*env)->releasestringutfchars(env, prompt, str); /* We assume here that the user does not type more than * 127 characters */ scanf("%127s", buf); return (*env)->newstringutf(env, buf); 记 得 检 测 GetStringUTFChars 的 返 回 值, 因 为 调 用 该 函 数 会 有 内 存 分 配 操 作, 失 败 后, 该 函 数 返 回 NULL, 并 抛 OutOfMemoryError 异 常 如 何 处 理 异 常, 后 面 会 有 介 绍 JNI 处 理 异 常, 不 同 于 Java 中 的 try...catch 在 JNI 中, 发 生 异 常, 不 会 改 变 代 码 执 行 轨 迹, 所 以, 当 返 回 NULL, 要 及 时 返 回, 或 马 上 处 理 异 常 Freeing Native String Resources 调 用 ReleaseStringUTFChars 释 放 GetStringUTFChars 中 分 配 的 内 存 (Unicode -> UTF-8 转 换 的 原 因 ) Constructing New Strings 使 用 JNIEnv->NewStringUTF 构 造 java.lang.string; 如 果 此 时 没 有 足 够 的 内 存, NewStringUTF 将 抛 OutOfMemoryError 异 常, 同 时 返 回 NULL Other JNI String Functions 除 了 GetStringUTFChars, ReleaseStringUTFChars, 和 NewStringUTF, JNI 还 支 持 其 他 操 作 String 的 函 数 供 使 用 GetStringChars 是 有 Java 内 部 Unicode 到 本 地 UTF-8 的 转 换 函 数, 可 以 调 用 GetStringLength, 获 得 以 Unicode 编 码 的 字 串 长 度 也 可 以 使 用 strlen 计 算 GetStringUTFChars 的 返 回 值, 得 到 字 串 长 度 const jchar * GetStringChars(JNIEnv *env, jstring str, jboolean *iscopy);
16 上 述 声 明 中, 有 iscopy 参 数, 当 该 值 为 JNI_TRUE, 将 返 回 str 的 一 个 拷 贝 ; 为 JNI_FALSE 将 直 接 指 向 str 的 内 容 注 意 : 当 iscopy 为 JNI_FALSE, 不 要 修 改 返 回 值, 不 然 将 改 变 java.lang.string 的 不 可 变 语 义 一 般 会 把 iscopy 设 为 NULL, 不 关 心 Java VM 对 返 回 的 指 针 是 否 直 接 指 向 java.lang.string 的 内 容 一 般 不 能 预 知 VM 是 否 会 拷 贝 java.lang.string 的 内 容, 程 序 员 应 该 假 设 GetStringChars 会 为 java.lang.string 分 配 内 存 在 JavaVM 的 实 现 中, 垃 圾 回 收 机 制 会 移 动 对 象, 并 为 对 象 重 新 配 置 内 存 一 但 java.lang.string 占 用 的 内 存 暂 时 无 法 被 GC 重 新 配 置, 将 产 生 内 存 碎 片, 过 多 的 内 存 碎 片, 会 更 频 繁 的 出 现 内 存 不 足 的 假 象 记 住 在 调 用 GetStringChars 之 后, 要 调 用 ReleaseStringChars 做 释 放, 不 管 在 调 用 GetStringChars 时 为 iscopy 赋 值 JNI_TRUE 还 是 JNI_FALSE, 因 不 同 JavaVM 实 现 的 原 因, ReleaseStringChars 可 能 释 放 内 存, 也 可 能 释 放 一 个 内 存 占 用 标 记 (iscopy 参 数 的 作 用, 从 GetStringChars 返 回 一 个 指 针, 该 指 针 直 接 指 向 String 的 内 容, 为 了 避 免 该 指 针 指 向 的 内 容 被 GC, 要 对 该 内 存 做 锁 定 标 记 ) New JNI String Function in Java 2 SDK Release 1.2 为 尽 可 能 的 避 免 内 存 分 配, 返 回 指 向 java.lang.string 内 容 的 指 针,Java 2 SDK release 1.2 提 供 了 :Get/RleaseStringCritical. 这 对 函 数 有 严 格 的 使 用 原 则 当 使 用 这 对 函 数 时, 这 对 函 数 间 的 代 码 应 被 当 做 临 界 区 (critical region). 在 该 代 码 区, 不 要 调 用 任 何 会 阻 塞 当 前 线 程 和 分 配 对 象 的 JNI 函 数, 如 IO 之 类 的 操 作 上 述 原 则, 可 以 避 免 JavaVM 执 行 GC 因 为 在 执 行 Get/ReleaseStringCritical 区 的 代 码 时,GC 被 禁 用 了, 如 果 因 某 些 原 因 在 其 他 线 程 中 引 发 了 JavaVM 执 行 GC 操 作,VM 有 死 锁 的 危 险 : 当 前 线 程 A 进 入 Get/RelaseStringCritical 区, 禁 用 了 GC, 如 果 其 他 线 程 B 中 有 GC 请 求, 因 A 线 程 禁 用 了 GC, 所 以 B 线 程 被 阻 塞 了 ; 而 此 时, 如 果 B 线 程 被 阻 塞 时 已 经 获 得 了 一 个 A 线 程 执 行 后 续 工 作 时 需 要 的 锁 ; 死 锁 发 生 了 可 以 嵌 套 调 用 GetStringCritical: jchar *s1, *s2; s1 = (*env)->getstringcritical(env, jstr1); if (s1 == NULL)... /* error handling */ s2 = (*env)->getstringcritical(env, jstr2); if (s2 == NULL)
17 (*env)->releasestringcritical(env, jstr1, s... /* error handling */... /* use s1 and s2 */ (*env)->releasestringcritical(env, jstr1, s1); (*env)->releasestringcritical(env, jstr2, s2); GetStringCritical 因 VM 实 现 的 原 因, 会 涉 及 内 存 操 作, 所 以 我 们 需 要 检 查 返 回 指. 比 如, 对 于 java.lang.string 来 说,VM 内 部 并 不 是 连 续 存 储 的, 所 以 GetStringCritical 要 返 回 一 个 连 续 的 字 符 数 组, 必 然 要 有 内 存 操 作 为 避 免 死 锁, 此 时 应 尽 量 避 免 调 用 其 他 JNI 方 法, 只 允 许 调 用 GetStringCritical/ReleaseStringCritical,Get/ReleasePrimitiveArrayCritical 因 VM 内 部 Unicode 编 码 的 缘 故, 所 以 Get/ReleaseStringUTFCritical 这 种 涉 及 Unicode->UTF8 转 换 要 分 配 内 存 的 函 数 不 支 持 GetStringRegion/GetStringUTFRegion, 向 准 备 好 的 缓 冲 区 赋 值, 如 下 : JNIEXPORT jstring JNICALL Java_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt) /*assumethepromptstringanduserinputhaslessthan128 characters */ char outbuf[128], inbuf[128]; int len = (*env)->getstringlength(env, prompt); (*env)->getstringutfregion(env, prompt, 0, len, outbuf); printf("%s", outbuf); scanf("%s", inbuf); return (*env)->newstringutf(env, inbuf); GetStringUTFRegion 有 两 个 参 数,starting index 和 length, 这 两 个 参 数 以 Unicode 编 码 计 算. 该 函 数 会 做 边 界 检 查, 所 以 可 能 抛 出 StringIndexOutOfBoundsException 因 为 该 函 数 不 涉 及 内 存 操 作, 所 以 较 GetStringUTFChars 使 用 要 简 单 译 注 : 有 两 个 函 数 :GetStringLength/GetStringUTFLength, 前 者 是 Unicode 编 码 长 度, 后 者 是 UTF 编 码 长 度 GetStringUTFRegion 很 有 用, 因 为 你 不 能 修 改 GetStringUTFChars 返 回 值, 所 以 需 要 另 外 malloc/strcpy 之 后, 再 操 作 返 回 值, 耗 时 费 力, 不 如 直 接 使 用 GetStringUTFRegion 来 的 简 洁 高 效 Summary of JNI String Functions
18 JNI Function Description Since GetStringChars ReleaseStringChars GetStringUTFChars ReleaseStringUTFChars Obtains or releases a pointer to the contents of a string in Unicode format.may return a copy of the string. Obtains or releases a pointer to the contents of a string in UTF-8 format. May return a copy of the string. JDK1.1 JDK1.1 GetStringLength GetStringUTFLength NewString NewStringUTF GetStringCritical ReleaseStringCritical GetStringRegion SetStringRegion GetStringUTFRegion SetStringUTFRegion Returns the number of Unicode characters in the string. Returns the number of bytes needed(not including the trailing 0) to represent a string in the UTF- 8 format. Creates a java.lang.string instance that contains the same sequence of characters as the given Unicode C string. Creates a java.lang.string instance that contains the same sequence of characters as the given UTF-8 encoded C string. Obtains a pointer to the contents of a string in Unicode format. May return a copy of the string. Native code must not block between a pair of Get/ ReleaseStringCritical calls. Copies the contents of a string to or from a preallocated C buffer in the Unicode format. Copies the content of a string to or from a preallocated C buffer in the UTF-8 format. JDK1.1 JDK1.1 JDK1.1 JDK1.1 Java 2 SDK1.2 Java 2 SDK1.2 Java 2 SDK Choosing among the String Functions 该 表 给 出 了 选 择 字 符 串 函 数 的 策 略 :
19 如 果 你 使 用 JDK 1.1 或 JDK 1.2, 你 只 能 使 用 Get/ReleaseStringChars 和 Get/ReleaseStringUTFChars 对 于 小 尺 寸 字 串 的 操 作, 首 选 Get/SetStringRegion 和 Get/SetStringUTFRegion, 因 为 栈 上 空 间 分 配, 开 销 要 小 的 多 ; 而 且 没 有 内 存 分 配, 就 不 会 有 out-of-memory exception 如 果 你 要 操 作 一 个 字 串 的 子 集, 本 套 函 数 的 starting index 和 length 正 合 要 求 GetStringCritical 必 须 非 常 小 心 使 用 你 必 须 确 保 不 分 配 新 对 象 和 任 何 阻 塞 系 统 的 操 作, 以 避 免 发 生 死 锁 如 下, 因 调 用 fprintf, 该 c 函 数 要 执 行 IO 操 作, 所 以 是 不 安 全 的 /* This is not safe! */ const char *c_str = (*env)->getstringcritical(env, j_str, 0); if (c_str == NULL)... /* error handling */ fprintf(fd, "%s\n", c_str); (*env)->releasestringcritical(env, j_str, c_str); 上 述 代 码, 不 安 全 的 原 因 : 当 前 线 程 执 行 了 GetStringCritical 后 将 禁 用 GC. 假 设,T 线 程 正 等 待 从 fd 读 取 数 据. 进 一 步 假 设, 调 用 fprintf 时 使 用 的 系 统 缓 存 将 等 待 T 读 取 完 毕 后 设 置. 我 们 制 造 了 一 个 死 锁 情 景 : 如 果 T 在 读 取 数 据 时 有 内 存 分 配 需 求, 可 能 使
20 JavaVM 执 行 GC. 而 此 时 的 GC 请 求 将 被 阻 塞, 直 到 当 前 线 程 执 行 ReleaseStringCritical, 不 幸 的 时, 这 个 操 作 必 须 等 fprintf 调 用 完 毕 后 才 会 执 行 此 时, 死 锁 发 生 所 以, 当 你 调 用 Get/RleaseStringCritical 要 时 刻 警 惕 死 锁 3.3 Accessing Arrays JNI 对 每 种 数 据 类 型 的 数 组 都 有 对 应 的 函 数 class IntArray private native int sumarray(int[] arr); public static void main(string[] args) IntArray p = new IntArray(); int arr[] = new int[10]; for (int i = 0; i < 10; i++) arr[i] = i; int sum = p.sumarray(arr); System.out.println("sum = " + sum); static System.loadLibrary("IntArray"); Accessing Arrays in C 如 下 直 接 操 作 数 组 是 错 误 的 : /* This program is illegal! */ JNIEXPORT jint JNICALL Java_IntArray_sumArray(JNIEnv *env, jobject obj, jintarray arr) int i, sum = 0; for (i = 0; i < 10; i++) sum += arr[i]; 如 下 操 作 正 确 : JNIEXPORT jint JNICALL
21 Java_IntArray_sumArray(JNIEnv *env, jobject obj, jintarray arr) jint buf[10]; jint i, sum = 0; (*env)->getintarrayregion(env, arr, 0, 10, buf); for (i = 0; i < 10; i++) sum += buf[i]; return sum; JNI 中 数 组 的 基 类 为 jarray, 其 他 如 jintarray 都 继 承 自 jarray Accessing Arrays of Primitive Types 上 节 示 例 中, 使 用 GetIntArrayRegion 拷 贝 数 组 内 容 到 buf 中, 这 里 没 有 做 越 界 异 常 检 测, 因 为 知 道 数 组 有 10 个, 参 数 3 为 待 拷 贝 数 组 的 起 始 位 置, 参 数 4 为 拷 贝 元 素 的 个 数 JNI 支 持 SetIntArrayRegion 允 许 重 新 设 置 数 组 一 个 区 域 的 值, 其 他 基 本 类 型 (boolean, short, 和 float) 也 有 对 应 的 支 持 JNI 支 持 通 过 Get/Release<Type>ArrayElemetns 返 回 Java 数 组 的 一 个 拷 贝 ( 实 现 优 良 的 VM, 会 返 回 指 向 Java 数 组 的 一 个 直 接 的 指 针, 并 标 记 该 内 存 区 域, 不 允 许 被 GC) JNIEXPORT jint JNICALL Java_IntArray_sumArray(JNIEnv *env, jobject obj, jintarray arr) jint *carr; jint i, sum = 0; carr = (*env)->getintarrayelements(env, arr, NULL); if (carr == NULL) return 0; /* exception occurred */ for (i=0; i<10; i++) sum += carr[i]; (*env)->releaseintarrayelements(env, arr, carr, 0); return sum; GetArrayLength 返 回 数 组 元 素 个 数 Java 2 SDK release 1.2 支 持 Get/ReleasePrimitiveArrayCritical, 该 套 函 数 的 使 用 原 则 与 上 述 String 部 分 相 同
22 3.3.3 Summary of JNI Primitive Array Functions JNI Function Description Since Get<Type>ArrayRegion Set<Type>ArrayRegion Get<Type>ArrayElements Release<Type>ArrayElements GetArrayLength New<Type>Array GetPrimitiveArrayCritical ReleasePrimitiveArrayCritica l Copies the contents of primitive arrays to or from a preallocated C buffer. Obtains a pointer to the contents of a primitive array.may return a copy of the array. Returns the number of elements in the array. Creates an array with the given length. Obtains or releases a pointer to the contents of a primitive array. May disable garbage collection, or return a copy of the array. JDK1.1 JDK1.1 JDK1.1 JDK1.1 Java 2 SDK Choosing among the Primitive Array Functions 使 用 原 则, 与 上 述 String 部 分 相 同, 请 阅 读 原 文 或 回 顾 前 面 的 内 容
23 3.3.5 Accessing Arrays of Objects 对 于 对 象 数 组 的 访 问, 使 用 Get/SetObjectArrayElement, 对 象 数 组 只 提 供 针 对 数 组 的 每 个 元 素 的 Get/Set, 不 提 供 类 似 Region 的 区 域 性 操 作 如 下, 二 维 数 组 示 例,Java 部 分 class ObjectArrayTest private static native int[][] initint2darray(int size); public static void main(string[] args) int[][] i2arr = initint2darray(3); for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) System.out.print(" " + i2arr[i][j]); System.out.println(); static System.loadLibrary("ObjectArrayTest"); JNI 部 分 : JNIEXPORT jobjectarray JNICALL Java_ObjectArrayTest_initInt2DArray(JNIEnv *env, jclass cls, int size) jobjectarray result; int i; jclass intarrcls = (*env)->findclass(env, "[I"); if (intarrcls == NULL) return NULL; /* exception thrown */ result = (*env)->newobjectarray(env, size, intarrcls, NULL); if (result == NULL) return NULL; /* out of memory error thrown */ for (i = 0; i < size; i++) jint tmp[256]; /* make sure it is large enough! */ int j;
24 jintarray iarr = (*env)->newintarray(env, size); if (iarr == NULL) return NULL; /* out of memory error thrown */ for (j = 0; j < size; j++) tmp[j] = i + j; (*env)->setintarrayregion(env, iarr, 0, size, tmp); (*env)->setobjectarrayelement(env, result, i, iarr); (*env)->deletelocalref(env, iarr); return result; newint2darray 方 法 首 先 调 用 FindClass 获 得 一 个 一 维 int 数 组. "[I" 作 为 JNI 类 描 述 符 等 价 于 Java int[] 声 明 FindClass 当 装 载 类 失 败, 返 回 NULL( 可 能 是 没 找 到 类 或 内 存 不 足 ) 译 注 : 类 描 述 符, 也 可 以 叫 做 " 类 签 名 " 签 名 的 作 用 : 为 了 准 确 描 述 一 件 事 物. Java Vm 定 义 了 类 签 名, 方 法 签 名 ; 其 中 方 法 签 名 是 为 了 支 持 方 法 重 载 FindClass 返 回 NULL 的 原 因 : 提 供 了 错 误 的 类 描 述 符 无 法 在 当 前 ClassLoader 上 下 文 中 找 到 类 解 决 办 法 : 认 真 检 查 类 描 述 符 是 否 正 确 以 "/" 作 为 包 分 隔 符, 即 类 描 述 符 的 形 式 为 "xxx/xxx/xxx", 而 非 "xxx.xxx.xxx", 也 可 简 单 记 忆 为 "/" 用 在 本 地 形 式 ( 或 虚 拟 机 ) 中 ;"." 分 隔 符, 用 在 Java(Java Programming Language) 环 境 中 ; 并 且 类 描 述 符 末 尾 没 有 ".java", 如 FindClass("java/lang/String") 而 非 FindClass("java/lang/String.java") 构 造 ClassLoader, 并 利 用 Class.forName(String name, boolean initialize, ClassLoader loader) 装 载 类 其 中 第 三 个 解 决 办 法 比 较 复 杂, 涉 及 到 Java 的 双 亲 委 派 模 型, 类 与 对 象 相 容 性 判 定 等 问 题, 将 有 专 门 文 章 阐 述 然 后 调 用 NewObjectArray 分 配 一 个 对 象 数 组 注 意," 基 本 类 型 数 组 " 这 是 个 整 体 的 概 念, 它 是 一 个 对 象 后 面 我 们 要 填 充 它 注 意,DeleteLocalRef 是 释 放 局 部 对 象 引 用 译 注 : Java 中 有 许 多 引 用 的 概 念, 我 们 只 关 心 GlobalRef 和 LocalRef 两 种 JNI 编 程 很 复 杂, 建 议 不 要 引 入 更 多 复 杂 的 东 西, 正 确 高 效 的 实 现 功 能 就 可 以 了 比 如 对 引 用 来 说, 最 好
25 不 要 在 JNI 中 考 虑 : 虚 引 用 和 影 子 引 用 等 复 杂 的 东 西 GlobalRef: 当 你 需 要 在 JNI 层 维 护 一 个 Java 对 象 的 引 用, 而 避 免 该 对 象 被 垃 圾 回 收 时, 使 用 NewGlobalRef 告 诉 VM 不 要 回 收 此 对 象, 当 本 地 代 码 最 终 结 束 该 对 象 的 引 用 时, 用 DeleteGlobalRef 释 放 之 LocalRef: 每 个 被 创 建 的 Java 对 象, 首 先 会 被 加 入 一 个 LocalRef Table, 这 个 Table 大 小 是 有 限 的, 当 超 出 限 制,VM 会 报 LocalRef Overflow Exception, 然 后 崩 溃. 这 个 问 题 是 JNI 编 程 中 经 常 碰 到 的 问 题, 请 引 起 高 度 警 惕, 在 JNI 中 及 时 通 过 DeleteLocalRef 释 放 对 象 的 LocalRef. 又,JNI 中 提 供 了 一 套 函 数 :Push/PopLocalFrame, 因 为 LocalRef Table 大 小 是 固 定 的, 这 套 函 数 只 是 执 行 类 似 函 数 调 用 时, 执 行 的 压 栈 操 作, 在 LocalRef Table 中 预 留 一 部 分 供 当 前 函 数 使 用, 当 你 在 JNI 中 产 生 大 量 对 象 时, 虚 拟 机 仍 然 会 因 LocalRef Overflow Exception 崩 溃, 所 以 使 用 该 套 函 数 你 要 对 LocalRef 使 用 量 有 准 确 估 计
26 CHAPTER 4 Fields and Methods 本 章 介 绍 如 何 访 问 对 象 成 员, 如 何 从 本 地 代 码 调 用 Java 方 法, 即 以 callback 方 式 从 本 地 代 码 调 用 Java 代 码 ; 最 后 介 绍 一 些 优 化 技 术 4.1 Accessing Fields Java 语 言 支 持 两 种 成 员 (field):(static) 静 态 成 员 和 实 例 成 员. 在 JNI 获 取 和 赋 值 成 员 的 方 法 是 不 同 的. 译 者 : Java 层 的 field 和 method, 不 管 它 是 public, 还 是 package private 和 protected, 从 JNI 都 可 以 访 问 到,Java 面 向 语 言 的 封 装 性 不 见 了 Java: class InstanceFieldAccess private String s; private native void accessfield(); public static void main(string args[]) InstanceFieldAccess c = new InstanceFieldAccess(); c.s = "abc"; c.accessfield(); System.out.println("In Java:"); System.out.println(" c.s = \"" + c.s + "\""); static System.loadLibrary("InstanceFieldAccess"); JNI: JNIEXPORT void JNICALL Java_InstanceFieldAccess_accessField(JNIEnv *env, jobject obj) jfieldid fid; /* store the field ID */ jstring jstr; const char *str; /* Get a reference to obj s class */
27 jclass cls = (*env)->getobjectclass(env, obj); printf("in C:\n"); /* Look for the instance field s in cls */ fid = (*env)->getfieldid(env, cls, "s", "Ljava/lang/String;"); if (fid == NULL) return; /* failed to find the field */ /* Read the instance field s */ jstr = (*env)->getobjectfield(env, obj, fid); str = (*env)->getstringutfchars(env, jstr, NULL); if (str == NULL) return; /* out of memory */ printf(" c.s = \"%s\"\n", str); (*env)->releasestringutfchars(env, jstr, str); /* Create a new string and overwrite the instance field */ jstr = (*env)->newstringutf(env, "123"); if (jstr == NULL) return; /* out of memory */ (*env)->setobjectfield(env, obj, fid, jstr); 输 出 : In C: c.s = "abc" In Java: c.s = "123" Procedure for Accessing an Instance Field 访 问 对 象 成 员 分 两 步, 首 先 通 过 GetFieldID 得 到 对 象 成 员 ID, 如 下 : fid = (*env)->getfieldid(env, cls, "s", "Ljava/lang/String;"); 示 例 代 码, 通 过 GetObjectClass 从 obj 对 象 得 到 cls. 这 时, 通 过 在 对 象 上 调 用 下 述 方 法 获 得 成 员 的 值 : jstr = (*env)->getobjectfield(env, obj, fid); 示 例 中 要 得 到 的 是 一 个 对 象 类 型, 所 以 用 GetObjectField. 此 外 JNI 还 提 供 Get/SetIntField,Get/SetFloatField 访 问 不 同 类 型 成 员
28 译 者 : 通 过 JNI 方 法 访 问 对 象 的 成 员,JNI 对 应 的 函 数 命 名 非 常 有 规 律, 即 Get/Set<Return Value Type>Field Field Descriptors 此 章 主 要 讲 述 签 名 问 题, 较 繁 琐, 可 以 总 结 如 下 : Type Signature Java Type Z boolean B byte C char S short I int J long F float D double L fully-qualified-class ; fully-qualified-class [ type type[] ( arg-types ) ret-type method type 如 下 Java 方 法 : long f (int n, String s, int[] arr); signature: "(ILjava/lang/String;[I)J" 签 名 是 一 种 用 参 数 个 数 和 类 型 区 分 同 名 方 法 的 手 段, 即 解 决 方 法 重 载 问 题 其 中 要 特 别 注 意 的 是 : 1. 类 描 述 符 开 头 的 'L' 与 结 尾 的 ';' 必 须 要 有 2. 数 组 描 述 符, 开 头 的 '[' 必 须 有. 3. 方 法 描 述 符 规 则 : "( 各 参 数 描 述 符 ) 返 回 值 描 述 符 ", 其 中 参 数 描 述 符 间 没 有 任 何 分 隔 符 号 描 述 符 很 重 要, 请 烂 熟 于 心. 写 JNI, 对 于 错 误 的 签 名 一 定 要 特 别 敏 感, 此 时 编 译 器 帮 不 上 忙, 执 行 make 前 仔 细 检 查 你 的 代 码 Accessing Static Fields 静 态 成 员 访 问 与 实 例 成 员 类 似 Java:
29 class StaticFielcdAccess private static int si; private native void accessfield(); public static void main(string args[]) StaticFieldAccess c = new StaticFieldAccess(); StaticFieldAccess.si = 100; c.accessfield(); System.out.println("In Java:"); System.out.println(" StaticFieldAccess.si = " + si); static System.loadLibrary("StaticFieldAccess"); JNI: JNIEXPORT void JNICALL Java_StaticFieldAccess_accessField(JNIEnv *env, jobject obj) jfieldid fid; /* store the field ID */ jint si; /* Get a reference to obj s class */ jclass cls = (*env)->getobjectclass(env, obj); printf("in C:\n"); /* Look for the static field si in cls */ fid = (*env)->getstaticfieldid(env, cls, "si", "I"); if (fid == NULL) return; /* field not found */ /* Access the static field si */ si = (*env)->getstaticintfield(env, cls, fid); printf(" StaticFieldAccess.si = %d\n", si); (*env)->setstaticintfield(env, cls, fid, 200); 输 出 : In C: StaticFieldAccess.si = 100 In Java: StaticFieldAccess.si = 200
30 请 阅 读 上 述 代 码, 不 再 叙 述 4.2 Calling Methods Java 中 有 三 类 方 法 : 实 例 方 法 静 态 方 法 和 构 造 方 法 class InstanceMethodCall private native void nativemethod(); private void callback() System.out.println("In Java"); public static void main(string args[]) InstanceMethodCall c = new InstanceMethodCall(); c.nativemethod(); static System.loadLibrary("InstanceMethodCall"); JNIEXPORT void JNICALL Java_InstanceMethodCall_nativeMethod(JNIEnv *env, jobject obj) jclass cls = (*env)->getobjectclass(env, obj); jmethodid mid = (*env)->getmethodid(env, cls, "callback", "()V"); if (mid == NULL) return; /* method not found */ printf("in C\n"); (*env)->callvoidmethod(env, obj, mid); 输 出 : In C In Java Calling Instance Methods 如 上 节 示 例, 回 调 Java 方 法 分 两 步 : 首 先 通 过 GetMethodID 在 给 定 类 中 查 询 方 法. 查 询 基 于 方 法 名 称 和 签 名 本 地 方 法 调 用 CallVoidMethod, 该 方 法 表 明 被 调 Java 方 法 的 返 回 值 为 void
31 译 者 : 从 JNI 调 用 实 例 方 法 命 名 规 则 :Call<Return Value Type>Method Formaing the Method Descriptor 一 个 方 法 描 述 ( 签 名 ) 由 各 参 数 类 型 签 名 和 返 回 值 签 名 构 成. 参 数 签 名 在 前, 并 用 小 括 号 括 起. 具 体 描 述 请 参 照 上 文 Calling Static Methods 同 实 例 方 法, 回 调 Java 静 态 方 法 分 两 步 : 首 先 通 过 GetStaticMethodID 在 给 定 类 中 查 找 方 法 通 过 CallStatic<ReturnValueType>Method 调 用 静 态 方 法 与 实 例 方 法 的 不 同, 前 者 传 入 参 数 为 jclass, 后 者 为 jobject Calling Instance Methods of a Superclass 调 用 被 子 类 覆 盖 的 父 类 方 法 : JNI 支 持 用 CallNonvirtual<Type>Method 满 足 这 类 需 求 : GetMethodID 获 得 method ID 调 用 CallNonvirtualVoidMethod, CallNonvirtualBooleanMethod 上 述, 等 价 于 如 下 Java 语 言 的 方 式 : super.f(); CallNonvirtualVoidMethod 可 以 调 用 构 造 函 数 4.3 Invoking Constructors 你 可 以 像 调 用 实 例 方 法 一 样, 调 用 构 造 方 法, 只 是 此 时 构 造 函 数 的 名 称 叫 做 "<init>". 如 下 构 造 java.lang.string 对 象 (JNI 为 了 方 便 有 个 对 应 的 NewString 做 下 面 所 有 工 作, 这 里 只 是 做 示 例 展 示 ): jstring MyNewString(JNIEnv *env, jchar *chars, jint len) jclass stringclass; jmethodid cid; jchararray elemarr; jstring result; stringclass = (*env)->findclass(env, "java/lang/string"); if (stringclass == NULL)
32 return NULL; /* exception thrown */ /* Get the method ID for the String(char[]) constructor */ cid = (*env)->getmethodid(env, stringclass, "<init>", "([C)V"); if (cid == NULL) return NULL; /* exception thrown */ /* Create a char[] that holds the string characters */ elemarr = (*env)->newchararray(env, len); if (elemarr == NULL) return NULL; /* exception thrown */ (*env)->setchararrayregion(env, elemarr, 0, len, chars); /* Construct a java.lang.string object */ result = (*env)->newobject(env, stringclass, cid, elemarr); /* Free local references */ (*env)->deletelocalref(env, elemarr); (*env)->deletelocalref(env, stringclass); return result; 首 先,FindClass 找 到 java.lang.string 的 jclass. 接 下 来, 用 GetMethodID 找 到 构 造 函 数 String(char[] chars) 的 MethodID. 此 时 用 NewCharArray 分 配 一 个 Char 数 组 对 象 NewObject 调 用 构 造 函 数 用 DeleteLocalRef 释 放 资 源 注 意 NewString 是 个 常 用 函 数, 所 以 在 JNI 中 直 接 被 支 持 了, 并 且 该 函 数 的 实 现 要 比 我 们 实 现 的 高 效 也 可 使 用 CallNonvirtualVoidMehtod 调 用 构 造 函 数. 如 下 代 码 : result = (*env)->newobject(env, stringclass, cid, elemarr); 可 被 替 换 为 : result = (*env)->allocobject(env, stringclass); if (result) (*env)->callnonvirtualvoidmethod(env, result, stringclass, cid, elemarr); /* we need to check for possible exceptions */ if ((*env)->exceptioncheck(env)) (*env)->deletelocalref(env, result); result = NULL;
33 AllocObject 创 建 一 个 未 初 始 化 的 对 象, 该 函 数 必 须 在 每 个 对 象 上 被 调 用 一 次 而 且 只 能 是 一 次 有 时 你 会 发 现 先 创 建 未 初 始 化 对 象 再 调 用 构 造 函 数 的 方 法 是 有 用 的 4.4 Caching Field and Method IDs 获 得 field 与 method IDs, 需 要 做 基 于 名 称 和 签 名 的 符 号 表 查 询, 此 过 程 可 以 被 优 化 基 本 想 法 是 : 只 在 第 一 次 使 用 ID 时 查 询, 然 后 缓 存 该 值. 有 两 个 缓 存 时 机 : 首 次 使 用 和 初 始 化 类 时 Caching at the Point of Use 如 下, 首 次 使 用 时, 缓 存 的 局 部 静 态 变 量 中, 避 免 每 次 调 用 计 算 JNIEXPORT void JNICALL Java_InstanceFieldAccess_accessField(JNIEnv *env, jobject obj) static jfieldid fid_s = NULL; /* cached field ID for s */ jclass cls = (*env)->getobjectclass(env, obj); jstring jstr; const char *str; if (fid_s == NULL) fid_s = (*env)->getfieldid(env, cls, "s", "Ljava/lang/String;"); if (fid_s == NULL) return; /* exception already thrown */ printf("in C:\n"); jstr = (*env)->getobjectfield(env, obj, fid_s); str = (*env)->getstringutfchars(env, jstr, NULL); if (str == NULL) return; /* out of memory */ printf(" c.s = \"%s\"\n", str); (*env)->releasestringutfchars(env, jstr, str); jstr = (*env)->newstringutf(env, "123"); if (jstr == NULL) return; /* out of memory */
34 (*env)->setobjectfield(env, obj, fid_s, jstr); 如 上, 静 态 变 量 fid_s 保 存 了 InstanceFieldAccess.s 的 filed ID 初 始 化 阶 段 静 态 变 量 被 赋 值 为 NULL 第 一 调 用 InstanceFieldAccess.accessField 时, 缓 存 fieldid 以 待 后 用 你 可 能 会 发 现 上 述 代 码 有 个 竞 争 条 件, 当 多 个 线 程 同 时 访 问 此 函 数 时, 可 能 会 同 时 计 算 一 个 field ID. 没 关 系, 此 处 的 竞 争 是 无 害 的, 因 为 即 使 在 多 个 线 程 中 同 时 计 算 该 field ID, 各 线 程 中 的 计 算 结 果 都 是 一 样 的 构 造 函 数 的 MethodID 也 可 被 缓 存, 如 下 : jstring MyNewString(JNIEnv *env, jchar *chars, jint len) jclass stringclass; jchararray elemarr; static jmethodid cid = NULL; jstring result; stringclass = (*env)->findclass(env, "java/lang/string"); if (stringclass == NULL) return NULL; /* exception thrown */ /* Note that cid is a static variable */ if (cid == NULL) /* Get the method ID for the String constructor */ cid = (*env)->getmethodid(env, stringclass, "<init>", "([C)V"); if (cid == NULL) return NULL; /* exception thrown */ /* Create a char[] that holds the string characters */ elemarr = (*env)->newchararray(env, len); if (elemarr == NULL) return NULL; /* exception thrown */ (*env)->setchararrayregion(env, elemarr, 0, len, chars); /* Construct a java.lang.string object */ result = (*env)->newobject(env, stringclass, cid, elemarr); /* Free local references */ (*env)->deletelocalref(env, elemarr); (*env)->deletelocalref(env, stringclass); return result;
35 4.4.2 Caching in the Defining Class's Initializer 上 述 第 一 次 使 用 缓 存 的 方 式, 每 次 都 有 与 NULL 的 判 断, 并 且 可 能 有 一 个 无 害 的 竞 争 条 件 而 初 始 化 类 时, 同 时 初 始 化 JNI 层 对 该 类 成 员 的 缓 存, 可 以 弥 补 上 述 缺 憾, 如 下 initids: Java 代 码 : class InstanceMethodCall private static native void initids(); private native void nativemethod(); private void callback() System.out.println("In Java"); public static void main(string args[]) InstanceMethodCall c = new InstanceMethodCall(); c.nativemethod(); static System.loadLibrary("InstanceMethodCall"); initids(); JNI 代 码 : jmethodid MID_InstanceMethodCall_callback; JNIEXPORT void JNICALL Java_InstanceMethodCall_initIDs(JNIEnv *env, jclass cls) MID_InstanceMethodCall_callback = (*env)->getmethodid(env, cls, "callback", "()V"); 译 注 : 还 可 以 改 进 上 述 缓 存 策 略 的 初 始 化 时 机, 第 一 种 方 法 的 缺 陷 文 中 已 经 提 了, 而 第 二 种 需 要 在 Java 代 码 主 动 调 用 JNI 作 缓 存 改 进 : 可 以 在 你 的 项 目 中 加 一 套 Hash 表, 封 装 FindClass,GetMethodID,GetFieldID 等 函 数, 查 询 的 所 有 操 作, 都 对 Hash 表 操 作, 如 首 次 FindClass 一 个 类, 这 时 可 以 把 一 个 类 的 所 有 成 员 缓 存 到 Hash 表 中, 用 名 字 + 签 名 做 键 值 译 者 所 做 项 目 引 入 了 这 个 优 化, 项 目 的 执 行 效 率 有 100 倍 的 提 高 ; 当 时 还 做 过 两 个 权 衡 : 1. 用 一 个 Hash 表, 还 是 每 个 类 一 个 Hash 表 2. 首 次 FindClass 类 时, 一 次 缓 存 所 有 的 成 员, 还 是 用 时 缓 存 最 终 做 的 选 择 是 : 为 了 降 低 冲 突, 每 个 类 一 个 Hash 表, 并 且 一 次 缓 存 一 个 类 的 所 有 成 员 当 然, 没 有 尽 善 尽 美 的 优 化 策 略, 我 们 做 到 这 个 层 次, 已 经 达 到 预 期 目 标, 没 有 继 续 深 入
36 4.4.3 Comparison between the Two Approaches to Caching IDs 在 对 Java 源 码 无 改 动 权 时 使 用 时 缓 存 是 一 种 合 理 的 解 决 方 案. 但 有 许 多 弊 端 : 无 害 的 竞 争 条 件 和 重 复 与 NULL 比 较 在 类 没 被 卸 载 时,MethodID 和 FieldID 一 直 有 效. 所 以 你 必 须 保 证 : 当 你 的 JNI 代 码 依 赖 这 些 缓 存 值 的 声 明 周 期 内, 该 类 不 会 被 卸 载 而 与 另 一 种 优 化 策 略, 连 同 类 的 初 始 化 缓 存 Method/Field ID, 每 当 类 再 次 被 装 载, 缓 存 值 会 被 更 新 所 以, 有 条 件 的 话, 更 安 全 的 优 化 策 略 是 : 连 同 类 的 初 始 化 缓 存 Method/Field ID 4.5 Performance of JNI Field and Method Operations 在 学 习 了 如 何 缓 存 field 和 method ID 的 优 化 技 术 后, 你 可 能 会 想 : 影 响 JNI 回 调 性 能 的 关 键 性 因 素 是 什 么? 在 效 率 方 面,JNI/Java 与 Java/JNI 和 Java/Java 间 对 比, 是 怎 样 的? 这 要 看 具 体 VM 实 现 的 JNI 效 率. 很 难 给 出 一 个 普 适 的 性 能 关 键 指 标. 取 而 代 之, 我 们 将 分 析 在 访 问 类 成 员 时 的 固 有 性 能 损 失 首 先 比 较 Java/native 和 Java/Java, 前 者 因 下 述 原 因 可 能 会 比 后 者 慢 : Java/native 与 Java/Java 的 调 用 约 定 不 同. 所 以,VM 必 须 在 调 用 前, 对 参 数 和 调 用 栈 做 特 殊 准 备 常 用 的 优 化 技 术 是 内 联. 相 比 Java/Java 调 用,Java/native 创 建 内 联 方 法 很 难 粗 略 估 计 : 执 行 一 个 Java/native 调 用 要 比 Java/Java 调 用 慢 2-3 倍. 也 可 能 有 一 些 VM 实 现,Java/native 调 用 性 能 与 Java/Java 相 当 ( 此 种 虚 拟 机,Java/native 使 用 Java/Java 相 同 的 调 用 约 定 ) native/java 调 用 效 率 可 能 与 Java/Java 有 10 倍 的 差 距, 因 为 VM 一 般 不 会 做 Callback 的 优 化 对 于 field 的 访 问, 将 没 什 么 不 同, 只 是 通 过 JNI 访 问 某 对 象 结 构 中 某 个 位 置 的 值 译 注 : 上 述 只 是 学 术 考 虑. 用 好 缓 存 的 优 化 策 略, 完 全 可 以 让 项 目 工 作 的 绝 对 出 色
37 CHAPTER 5 Local and Global References JNI 把 instance 和 array 类 型 的 指 针 对 外 公 布 为 opaque reference. 本 地 代 码 不 直 接 操 作 指 针, 而 是 通 过 JNI 函 数, 所 以 本 地 代 码 不 用 关 心 内 存 布 局. 关 于 reference, 这 里 还 有 更 丰 富 的 东 西 有 待 介 绍 : JNI 支 持 三 种 类 型 的 opaque reference:local references, global references, 和 weak global references Local 和 Global 引 用 有 不 同 的 生 命 周 期. Local Ref 在 native method 执 行 完 毕 后 被 JavaVM 自 动 释 放, 而 GlobalRef,WeakRef 在 程 序 员 主 动 释 放 前 一 直 有 效 各 种 引 用 都 有 使 用 范 围. 如 LocalRef 只 能 在 当 前 线 程 的 native method 中 使 用 本 章 将 详 细 讲 述 不 同 类 型 Ref 的 使 用 方 法, 正 确 管 理 JNI 引 用 是 程 序 健 壮 空 间 占 用 少 的 关 键 5.1 Local and Global References LocalRef 与 GlobalRef 的 差 异, 将 用 几 个 示 例 说 明 : 大 部 分 JNI 函 数 都 会 创 建 LocalRef, 如 NewObject 创 建 一 个 实 例, 并 返 回 一 个 指 向 该 实 例 的 LocalRef LocalRef 只 在 本 线 程 的 native method 中 有 效. 一 但 native method 返 回,LocalRef 将 被 释 放 不 要 缓 存 一 个 LocalRef, 并 企 图 在 下 次 进 入 该 JNI 方 法 时 使 用, 如 下 : /* This code is illegal */ jstring MyNewString(JNIEnv *env, jchar *chars, jint len) static jclass stringclass = NULL; jmethodid cid; jchararray elemarr; jstring result; if (stringclass == NULL) stringclass = (*env)->findclass(env, "java/lang/string"); if (stringclass == NULL) return NULL; /* exception thrown */
38 /* It is wrong to use the cached stringclass here, because it may be invalid. */ cid = (*env)->getmethodid(env, stringclass, "<init>", "([C)V");... elemarr = (*env)->newchararray(env, len);... result = (*env)->newobject(env, stringclass, cid, elemarr); (*env)->deletelocalref(env, elemarr); return result; 上 述 代 码, 企 图 重 复 使 用 FindClass(env, "java/lang/string") 的 返 回 值, 这 种 方 式 不 对, 因 为 FindClass 返 回 的 是 一 个 LocalRef. 请 设 想 以 下 代 码 : JNIEXPORT jstring JNICALL Java_C_f(JNIEnv *env, jobject this) char *c_str =...;... return MyNewString(c_str); 如 下, 两 次 调 用 f 这 个 本 地 方 法 = C.f(); // The first call is perhaps OK.... = C.f(); // This would use an invalid local reference.... 第 一 次 调 用 可 能 正 确, 而 第 二 次 将 引 用 一 个 无 效 位 置, 因 为 第 二 次 企 图 使 用 存 在 静 态 变 量 中 的 LocalRef 有 两 种 方 式 让 LocalRef 无 效, 一,native method 返 回,JavaVM 自 动 释 放 LocalRef; 二, 用 DeleteLocalRef 主 动 释 放 既 然 LocalRef 会 被 JavaVM 自 动 释 放, 为 什 么 还 要 有 DeleteLocalRef? 因 为 LocalRef 是 阻 止 引 用 被 GC, 但 当 你 在 本 地 代 码 中 操 作 大 量 对 象 时, 而 LocalRefTable 又 是 有 限 的, 及 时 调 用 DeleteLocalRef, 会 释 放 LocalRef 在 LocalRefTable 中 所 占 位 置 并 使 对 象 及 时 得 到 回 收 LocalRef 只 在 创 建 该 对 象 的 线 程 中 有 效, 企 图 把 LocalRef 存 到 全 局 变 量 中 供 其 他 线 程 使 用 的 做 法 是 错 误 的 译 注 : 注 意 这 里 的 提 到 的 native method 返 回, 返 回 是 指 回 到 Java 层, 如 果 从 一 个 本 地 函 数 返
39 回 到 另 一 个 本 地 函 数,LocalRef 是 有 效 的 Global References 释 放 GlobalRef 前, 你 可 以 在 多 个 本 地 方 法 调 用 过 程 和 多 线 程 中 使 用 GlobalRef 所 引 对 象 与 LocalRef 类 似,GlobalRef 的 作 用 : 防 止 对 象 被 GC(garbage collected, 垃 圾 回 收 ) GlobalRef 与 LocalRef 不 同 的 是,LocalRef 一 般 自 动 创 建 ( 返 回 值 为 jobject/jclass 等 JNI 函 数 ), 而 GlobalRef 必 须 通 过 NewGlobalRef 由 程 序 员 主 动 创 建 如 下 : /* This code is OK */ jstring MyNewString(JNIEnv *env, jchar *chars, jint len) static jclass stringclass = NULL;... if (stringclass == NULL) jclass localrefcls = (*env)->findclass(env, "java/lang/string"); if (localrefcls == NULL) return NULL; /* exception thrown */ /* Create a global reference */ stringclass = (*env)->newglobalref(env, localrefcls); /* The local reference is no longer useful */ (*env)->deletelocalref(env, localrefcls); /* Is the global reference created successfully? */ if (stringclass == NULL) return NULL; /* out of memory exception thrown */... 该 例 做 了 修 改, 当 stringclass 为 NULL 时, 我 们 创 建 了 java.lang.string 的 GlboalRef, 并 删 除 了 对 应 的 LocalRef, 以 待 下 次 再 进 入 此 方 法 时, 使 用 stringclass Weak Global References Weak Global Ref 用 NewGlobalWeakRef 于 DeleteGlobalWeakRef 进 行 创 建 和 删 除, 多 个 本 地 方 法 调 用 过 程 中 和 多 线 程 上 下 文 中 使 用 的 特 性 与 GlobalRef 相 同, 但 该 类 型 的 引 用 不 保 证 不 被 GC
40 前 述 示 例 MyNewString 中, 对 java.lang.string 声 明 GlobalRef 或 GlobalWeakRef 效 果 相 同, 因 为 java.lang.string 是 一 个 系 统 类 不 会 被 GC Weak Global Ref 使 用 在 允 许 被 GC 的 场 合, 如 内 存 紧 张 时 JNIEXPORT void JNICALL Java_mypkg_MyCls_f(JNIEnv *env, jobject self) static jclass mycls2 = NULL; if (mycls2 == NULL) jclass mycls2local = (*env)->findclass(env, "mypkg/mycls2"); if (mycls2local == NULL) return; /* can t find class */ mycls2 = NewWeakGlobalRef(env, mycls2local); if (mycls2 == NULL) return; /* out of memory */... /* use mycls2 */ 我 们 假 设,MyCls 与 MyCls2 有 同 样 的 生 命 周 期 ( 并 被 同 样 的 Class Loader 装 载 ), 类 似 MyCls 被 卸 载 而 MyCls2 没 被 卸 载 的 情 况 不 考 虑 如 果 发 生 这 种 情 况, 我 们 还 需 要 检 测 mycls2 是 否 还 执 行 的 对 象 仍 然 有 效 Comparing Reference 有 两 个 对 象, 用 如 下 方 法 比 较 相 容 性 : (*env)->issameobject(env, obj1, obj2) 如 果 相 容, 返 回 JNI_TRUE, 否 则 返 回 JNI_FALSE 与 NULL 的 比 较,LocalRef 与 GlobalRef 语 义 显 然, 前 提 是 释 放 了 两 个 引 用, 程 序 员 重 新 为 相 应 变 量 做 了 NULL 初 始 化 但 对 于 Weak Global Ref 来 说, 需 要 使 用 下 述 代 码 判 定 : (*env)->issameobject(env, wobj, NULL) 因 为, 对 于 一 个 Weak Global Ref 来 说 可 能 指 向 已 经 被 GC 的 无 效 对 象 译 注 : 上 述 的 判 断, 都 是 假 设 所 有 的 类 和 对 象 都 是 在 一 个 Class Loader 下 被 装 载 的. 关 于 ClassLoader 的 议 题 后 有 专 门 文 章.
41 5.2 Freeing Reference 每 个 JNI 引 用 都 会 引 用 表 中 的 一 个 位 置. 作 为 一 个 JNI 程 序 员, 你 应 该 清 楚 程 序 某 阶 段 中 使 用 的 引 用 数 量 如 LocalRef, 如 果 你 疏 于 DeleteLocalRef 的 话, 在 JavaVM 运 行 限 制 内 你 的 应 用 程 序 工 作 正 常, 在 极 端 情 况 会 崩 溃 Freeing Local References 译 注 : 本 章 没 有 翻 译. 本 章 讲 了 很 多 关 于 LocalRef 的 释 放 原 则, 译 者 认 为 : 考 虑 何 时 释 放 / 何 时 不 释 放 的 问 题, 不 如 认 真 审 查 代 码, 严 堵 每 个 泄 露 环 节, 尽 最 大 努 力 提 高 程 序 的 稳 定 性 就 像 内 存 分 配 一 样, 虽 然 进 程 结 束 后,OS 自 动 释 放 该 进 程 分 配 的 所 有 内 存, 但 对 于 期 望 长 期 稳 定 运 行 的 系 统 来 说, 我 们 希 望 杜 绝 内 存 泄 露 Managing Local References in Java 2 SDK Release 1.2 译 注 : 本 章 没 有 翻 译 由 于 LocalRef Table 大 小 是 固 定 的, 这 套 函 数 只 是 执 行 类 似 函 数 调 用 时, 执 行 的 压 栈 操 作, 并 在 执 行 PopLocalFrame 后 执 行 类 似 退 栈 操 作, 在 LocalRef Table 中 预 留 一 部 分 供 当 前 函 数 使 用, 当 你 在 JNI 中 产 生 大 量 对 象 时, 虚 拟 机 仍 然 会 因 LocalRef Overflow Exception 崩 溃 具 体 原 则 仍 如 上 述, 严 堵 每 个 泄 露 环 节 ; 如 果 你 能 准 确 估 计 LocalRef 用 量, 可 以 使 用 Push/PopLocalFrame Freeing Global References 当 不 再 使 用 GlobalRef 所 指 对 象, 及 时 调 用 DeleteGlobalRef 释 放 对 象. 否 则,GC 将 不 回 收 该 对 象 对 于 DeleteWeakGlobalRef 来 说, 不 使 用 WeakGlobalRef 时, 也 要 及 时 释 放, 因 为 即 使 GC 会 回 收 该 对 象 内 容,WeakGlobalRef 在 Table 中 的 位 置 还 占 用 着, 即 和 尚 都 跑 了, 庙 还 在 译 注 : 综 上, 不 管 何 种 类 型 引 用, 在 不 使 用 所 引 用 对 象 后, 及 时 调 用 对 应 指 针 类 型 的 释 放 函 数 5.3 Rules for Managing References 现 在 我 们 归 纳 一 下 管 理 JNI 引 用 的 原 则. 看 看 如 何 减 少 内 存 使 用 有 效 使 用 对 象 有 两 类 本 地 函 数 : 功 能 函 数 和 工 具 函 数 当 写 native method 的 实 现 时, 要 认 真 处 理 循 环 中 产 生 的 LocalRef. VM 规 范 中 规 定 每 个 本 地 方 法 至 少 要 支 持 16 个 LocalRef 供 自 由 使 用 并 在 本 地 方 法 返 回 后 回 收. 本 地 方 法 绝 对 不 能 滥 用 GlobalRef 和 WeakGlobalRef, 因 为 此 类 型 引 用 不 会 被 自 动 回 收
42 工 具 函 数, 对 LocalRef 的 使 用 更 要 提 起 警 惕, 因 为 该 类 函 数 调 用 上 下 文 不 确 定, 而 且 会 被 重 复 调 用, 每 个 代 码 路 径 都 要 保 证 不 存 在 LocalRef 泄 露 由 于 某 些 缓 存 机 制, 可 以 在 工 具 函 数 中 创 建 GlobalRef, WeakGlobalRef 当 工 具 函 数 返 回 对 象 时, 要 严 格 遵 守 引 用 约 定, 让 调 用 者 在 决 定 是 否 释 放 时 能 作 出 准 确 判 断, 如 下 : while (JNI_TRUE) jstring infostring = GetInfoString(info);... /* process infostring */??? /* * we need to call DeleteLocalRef, DeleteGlobalRef, * or DeleteWeakGlobalRef depending on the type of * reference returned by GetInfoString. */ JNI 方 法 NewLocalRef 总 保 证 返 回 一 个 LocalRef, 如 下 : jstring MyNewString(JNIEnv *env, jchar *chars, jint len) static jstring result; /* wstrncmp compares two Unicode strings */ if (wstrncmp("commonstring", chars, len) == 0) /* refers to the global ref caching "CommonString" */ static jstring cachedstring = NULL; if (cachedstring == NULL) /* create cachedstring for the first time */ jstring cachedstringlocal =... ; /* cache the result in a global reference */ cachedstring = (*env)->newglobalref(env, cachedstringlocal); return (*env)->newlocalref(env, cachedstring);... /* create the string as a local reference and store in result as a local reference */
43 return result; Push/PopLocalFrame 常 被 用 来 管 理 LocalRef. 在 进 入 本 地 方 法 时, 调 用 一 次 PushLocalFrame, 并 在 本 地 方 法 结 束 时 调 用 PopLocalFrame. 此 对 方 法 执 行 效 率 非 常 高, 建 议 使 用 这 对 方 法 译 注 : 你 只 要 对 当 前 上 下 文 内 使 用 的 对 象 数 量 有 准 确 估 计, 建 议 使 用 这 对 方 法, 在 这 对 方 法 间, 不 必 调 用 DeleteLocalRef, 只 要 该 上 下 文 结 尾 处 调 用 PopLocalFrame 会 一 次 性 释 放 所 有 LocalRef 一 定 保 证 该 上 下 文 出 口 只 有 一 个, 或 每 个 return 语 句 都 做 严 格 检 查 是 否 调 用 了 PopLocalFrame jobject f(jnienv *env,...) jobject result; if ((*env)->pushlocalframe(env, 10) < 0) /* frame not pushed, no PopLocalFrame needed */ return NULL;... result =...; if (...) /* remember to pop local frame before return */ result = (*env)->poplocalframe(env, result); return result;... result = (*env)->poplocalframe(env, result); /* normal return */ return result; 忘 记 调 用 PopLocalFrame 可 能 会 使 VM 崩 溃
44 CHAPTER 6 Exceptions 我 们 已 经 碰 到 在 调 用 JNI 方 法 时 出 现 异 常 的 情 况. 本 章 将 介 绍 如 何 检 查 并 处 理 异 常 本 章 只 关 注 在 调 用 JNI 方 法 或 Java 方 法 时 出 现 异 常 的 处 理 办 法 (Java 异 常 ), 不 涉 及 本 地 代 码 本 身 ( 如 本 地 代 码 中 的 除 0 错 ) 或 调 用 系 统 函 数 出 现 异 常 的 处 理 方 法 Caching and Throwing Exceptions in Native Code 如 下 Java 代 码 展 示 如 何 声 明 JNI 可 能 抛 出 的 异 常 class CatchThrow private native void doit() throws IllegalArgumentException; private void callback() throws NullPointerException throw new NullPointerException("CatchThrow.callback"); public static void main(string args[]) CatchThrow c = new CatchThrow(); try c.doit(); catch (Exception e) System.out.println("In Java:\n\t" + e); static System.loadLibrary("CatchThrow"); JNI 代 码 : JNIEXPORT void JNICALL Java_CatchThrow_doit(JNIEnv *env, jobject obj) jthrowable exc; jclass cls = (*env)->getobjectclass(env, obj); jmethodid mid = (*env)->getmethodid(env, cls, "callback", "()V"); if (mid == NULL) return;
45 (*env)->callvoidmethod(env, obj, mid); exc = (*env)->exceptionoccurred(env); if (exc) /* We don't do much with the exception, except that we print a debug message for it, clear it, and throw a new exception. */ jclass newexccls; (*env)->exceptiondescribe(env); (*env)->exceptionclear(env); newexccls = (*env)->findclass(env, "java/lang/illegalargumentexception"); if (newexccls == NULL) /* Unable to find the exception class, give up. */ return; (*env)->thrownew(env, newexccls, "thrown from C code"); 输 出 : java.lang.nullpointerexception: at CatchThrow.callback(CatchThrow.java) at CatchThrow.doit(Native Method) at CatchThrow.main(CatchThrow.java) In Java: java.lang.illegalargumentexception: thrown from C code callback 方 法 抛 出 NullPointerException. 当 CallVoidMethod 把 控 制 权 返 回 给 本 地 代 码, 本 地 代 码 调 用 ExceptionOccurred 检 查 是 否 有 异 常 发 生. 我 们 的 处 理 方 式 是, 当 有 异 常 发 生, 调 用 ExceptionDescribe 打 印 调 用 堆 栈, 然 后 用 ExceptionClear 清 空 异 常, 最 后 重 新 抛 出 IllegalArgumentException 译 者 : ExceptionOccurred 返 回 一 个 jobject, 注 意 结 束 处 理 时 调 用 DeleteLocalRef 删 除 该 返 回 值 JNI 中 还 有 一 个 ExceptionCheck, 只 是 返 回 一 个 jboolean 的 布 尔 值, 更 适 合 检 查 异 常 是 否 发 生 在 JNI 中 产 生 的 异 常 ( 通 过 调 用 ThrowNew), 与 Java 语 言 中 异 常 发 生 的 行 为 不 同,JNI 中 当 前 代 码 路 径 不 会 立 即 改 变 在 Java 中 发 生 异 常,VM 自 动 把 控 制 权 转 向 try/catch 中 匹 配
46 的 异 常 类 型 处 理 块 VM 首 先 清 空 异 常 队 列, 然 后 执 行 异 常 处 理 块 相 反,JNI 中 必 须 显 式 处 理 VM 的 处 理 方 式 A Utility Function JNI 中 抛 异 常 很 经 典 : 找 异 常 类, 调 用 ThrowNew 抛 出 之 ; 所 以, 可 以 写 一 个 工 具 函 数 void JNU_ThrowByName(JNIEnv *env, const char *name, const char *msg) jclass cls = (*env)->findclass(env, name); /* if cls is NULL, an exception has already been thrown */ if (cls!= NULL) (*env)->thrownew(env, cls, msg); /* free the local ref */ (*env)->deletelocalref(env, cls); 本 书 中,JNU 前 缀 表 示 JNI Utilities. JNU_ThrowByName 首 先 通 过 FindClass 找 到 异 常 类 如 果 FindClass 找 类 失 败, 将 返 回 NULL, 并 抛 出 NoClassDefFoundError 异 常 此 情 况, JNU_ThrowByName 将 保 留 该 异 常, 然 后 返 回. 如 果 FindClass 成 功, 将 调 用 ThrowNew 抛 出 异 常 所 以 不 管 哪 种 情 况, 调 用 该 函 数 后, 当 前 的 JNIEnv 环 境 里 总 有 个 异 常 6.2 Proper Exception Handling JNI 程 序 员 应 对 所 有 可 能 的 异 常 做 处 理, 这 个 要 求 虽 然 苛 刻, 但 这 是 健 壮 软 件 的 保 证 Checking for Exception 有 两 种 方 式 检 查 是 否 有 异 常 发 生 1. 大 多 数 JNI 函 数 用 显 式 方 式 表 明 当 前 线 程 是 否 有 异 常 发 生 下 述 代 码 判 断 GetFieldID 返 回 是 否 为 NULL 以 检 查 是 否 发 生 异 常 : /* a class in the Java programming language */ public class Window long handle; int length; int width; static native void initids(); static
《C语言基础入门》课程教学大纲
C 语 言 开 发 入 门 教 程 课 程 教 学 大 纲 课 程 编 号 :201409210011 学 分 :5 学 分 学 时 :58 学 时 ( 其 中 : 讲 课 学 时 :39 学 时 上 机 学 时 :19 学 时 ) 先 修 课 程 : 计 算 机 导 论 后 续 课 程 :C++ 程 序 设 计 适 用 专 业 : 信 息 及 其 计 算 机 相 关 专 业 开 课 部 门 : 计
More informationI
机 电 一 级 注 册 建 造 师 继 续 教 育 培 训 广 东 培 训 点 网 上 报 名 操 作 使 用 手 册 (2013 年 1 月, 第 一 版 ) 第 一 章 个 人 注 册 与 个 人 信 息 管 理 1. 个 人 注 册 ( 请 每 人 只 申 请 一 个 注 册 号, 如 果 单 位 批 量 报 班 单 位 帮 申 请 注 册, 不 需 个 人 再 注 册 ) 首 次 报 班,
More information<433A5C446F63756D656E747320616E642053657474696E67735C41646D696E6973747261746F725CD7C0C3E65CC2DBCEC4CFB5CDB3CAB9D3C3D6B8C4CFA3A8BCF2BBAFA3A95CCAB9D3C3D6B8C4CF31302D31392E646F63>
( 一 ) 系 统 整 体 操 作 流 程 简 述 3 ( 二 ) 系 统 中 各 角 色 操 作 功 能 说 明 5 1. 学 院 管 理 员 5 2. 教 学 院 长 8 3. 指 导 教 师 10 4. 答 辩 组 组 长 12 5. 学 生 12 6. 系 统 管 理 员 15 ( 一 ) 论 文 系 统 常 见 问 题 16 ( 二 ) 论 文 查 重 常 见 问 题 22 1 2 主
More information何 秋 琳 张 立 春 视 觉 学 习 研 究 进 展 视 觉 注 意 视 觉 感 知
第 卷 第 期 年 月 开 放 教 育 研 究 何 秋 琳 张 立 春 华 南 师 范 大 学 未 来 教 育 研 究 中 心 广 东 广 州 随 着 图 像 化 技 术 和 电 子 媒 体 的 发 展 视 觉 学 习 也 逐 步 发 展 为 学 习 科 学 的 一 个 研 究 分 支 得 到 研 究 人 员 和 教 育 工 作 者 的 广 泛 关 注 基 于 此 作 者 试 图 对 视 觉 学 习
More information深圳市新亚电子制程股份有限公司
证 券 代 码 :002388 证 券 简 称 : 新 亚 制 程 公 告 编 号 :2016-053 深 圳 市 新 亚 电 子 制 程 股 份 有 限 公 司 2016 年 第 二 次 临 时 股 东 大 会 决 议 公 告 本 公 司 及 董 事 会 全 体 成 员 保 证 公 告 内 容 真 实 准 确 和 完 整, 不 存 在 虚 假 记 载 误 导 性 陈 述 或 者 重 大 遗 漏 特
More information说 明 为 了 反 映 教 运 行 的 基 本 状 态, 为 校 和 院 制 定 相 关 政 策 和 进 行 教 建 设 与 改 革 提 供 据 依 据, 校 从 程 资 源 ( 开 类 别 开 量 规 模 ) 教 师 结 构 程 考 核 等 维 度, 对 2015 年 春 季 期 教 运 行 基
内 部 资 料 东 北 师 范 大 教 运 行 基 本 状 态 据 报 告 2015 年 春 季 期 教 务 处 2015 年 10 月 27 日 说 明 为 了 反 映 教 运 行 的 基 本 状 态, 为 校 和 院 制 定 相 关 政 策 和 进 行 教 建 设 与 改 革 提 供 据 依 据, 校 从 程 资 源 ( 开 类 别 开 量 规 模 ) 教 师 结 构 程 考 核 等 维 度,
More information第2章 数据类型、常量与变量
第 2 章 数 据 类 型 常 量 与 变 量 在 计 算 机 程 序 中 都 是 通 过 值 (value) 来 进 行 运 算 的, 能 够 表 示 并 操 作 值 的 类 型 为 数 据 类 型 在 本 章 里 将 会 介 绍 JavaScript 中 的 常 量 (literal) 变 量 (variable) 和 数 据 类 型 (data type) 2.1 基 本 数 据 类 型 JavaScript
More information评 委 : 李 炎 斌 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单
评 委 : 李 炎 斌 - 个 人 清 标 评 审 明 细 表 评 审 因 素 序 号 投 标 单 位 清 标 评 审 1 深 圳 市 创 捷 科 技 有 限 合 格 2 四 川 川 大 智 胜 软 件 股 份 有 限 合 格 3 北 京 航 天 长 峰 科 技 工 业 集 团 有 限 公 司 合 格 4 深 圳 中 兴 力 维 技 术 有 限 合 格 5 深 圳 键 桥 通 讯 技 术 股 份 有
More information一 公 共 卫 生 硕 士 专 业 学 位 论 文 的 概 述 学 位 论 文 是 对 研 究 生 进 行 科 学 研 究 或 承 担 专 门 技 术 工 作 的 全 面 训 练, 是 培 养 研 究 生 创 新 能 力, 综 合 运 用 所 学 知 识 发 现 问 题, 分 析 问 题 和 解 决
上 海 市 公 共 卫 生 硕 士 专 业 学 位 论 文 基 本 要 求 和 评 价 指 标 体 系 ( 试 行 ) 上 海 市 学 位 委 员 会 办 公 室 二 O 一 二 年 三 月 一 公 共 卫 生 硕 士 专 业 学 位 论 文 的 概 述 学 位 论 文 是 对 研 究 生 进 行 科 学 研 究 或 承 担 专 门 技 术 工 作 的 全 面 训 练, 是 培 养 研 究 生 创
More information龚 亚 夫 在 重 新 思 考 基 础 教 育 英 语 教 学 的 理 念 一 文 中 援 引 的 观 点 认 为 当 跳 出 本 族 语 主 义 的 思 维 定 式 后 需 要 重 新 思 考 许 多 相 连 带 的 问 题 比 如 许 多 发 音 的 细 微 区 别 并 不 影 响 理 解 和
语 音 语 篇 语 感 语 域 林 大 津 毛 浩 然 改 革 开 放 以 来 的 英 语 热 引 发 了 大 中 小 学 英 语 教 育 整 体 规 划 问 题 在 充 分 考 虑 地 区 学 校 和 个 体 差 异 以 及 各 家 观 点 的 基 础 上 遵 循 实 事 求 是 逐 级 定 位 逐 层 分 流 因 材 施 教 的 原 则 本 研 究 所 倡 导 的 语 音 语 篇 语 感 语 域
More information,,,,, :,, (.,, );, (, : ), (.., ;. &., ;.. &.., ;, ;, ),,,,,,, ( ) ( ),,,,.,,,,,, : ;, ;,.,,,,, (., : - ),,,, ( ),,,, (, : ),, :,
: 周 晓 虹 : - -., - - - -. :( ), -,.( ),,, -. - ( ).( ) ', -,,,,, ( ).( ),,, -., '.,, :,,,, :,,,, ,,,,, :,, (.,, );, (, : ), (.., ;. &., ;.. &.., ;, ;, ),,,,,,, ( ) ( ),,,,.,,,,,, : ;, ;,.,,,,, (., : - ),,,,
More information修改版-操作手册.doc
职 称 信 息 系 统 升 级 指 南 须 使 用 IE9 及 其 以 上 版 本 浏 览 器 或 谷 歌 浏 览 器 登 录 www.njrs.gov.cn 南 京 市 职 称 ( 职 业 资 格 ) 工 作 领 导 小 组 办 公 室 2016 年 5 月 目 录 一 申 报 人 员 操 作 指 南...1 1.1 职 称 初 定 申 报...1 1.1.1 职 称 初 定 基 础 信 息 填
More information文 化 记 忆 传 统 创 新 与 节 日 遗 产 保 护 根 据 德 国 学 者 阿 斯 曼 的 文 化 记 忆 理 论 仪 式 与 文 本 是 承 载 文 化 记 忆 的 两 大 媒 体 在 各 种 仪 式 行 为 中 节 日 以 其 高 度 的 公 共 性 有 组 织 性 和 历 史 性 而 特 别 适 用 于 文 化 记 忆 的 储 存 和 交 流 节 日 的 文 化 功 能 不 仅 在 于
More information18 上 报 该 学 期 新 生 数 据 至 阳 光 平 台 第 一 学 期 第 四 周 至 第 六 周 19 督 促 学 习 中 心 提 交 新 增 专 业 申 请 第 一 学 期 第 四 周 至 第 八 周 20 编 制 全 国 网 络 统 考 十 二 月 批 次 考 前 模 拟 题 第 一 学
1 安 排 组 织 全 国 网 络 统 考 九 月 批 次 网 上 考 前 辅 导 第 一 学 期 第 一 周 统 考 考 前 半 个 月 2 下 发 全 国 网 络 统 考 九 月 批 次 准 考 证 第 一 学 期 第 一 周 导 出 下 半 年 成 人 本 科 学 士 学 位 英 语 统 一 考 试 报 考 3 信 息 第 一 学 期 第 一 周 4 教 学 计 划 和 考 试 计 划 上 网,
More information评 委 : 徐 岩 宇 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单
评 委 : 徐 岩 宇 - 个 人 清 标 评 审 明 细 表 评 审 因 素 序 号 投 标 单 位 清 标 评 审 1 深 圳 市 创 捷 科 技 有 限 合 格 2 四 川 川 大 智 胜 软 件 股 份 有 限 合 格 3 北 京 航 天 长 峰 科 技 工 业 集 团 有 限 公 司 合 格 4 深 圳 中 兴 力 维 技 术 有 限 合 格 5 深 圳 键 桥 通 讯 技 术 股 份 有
More information(2015-2016-2)-0004186-04205-1 140242 信 号 与 系 统 Ⅰ 学 科 基 础 必 修 课 37 37 1 教 203 17 周 2016 年 06 月 13 日 (08:00-09:35) (2015-2016-2)-0004186-04205-1 141011
关 于 2015-2016 学 年 第 二 学 期 期 末 周 内 考 试 时 间 地 点 安 排 选 课 课 号 班 级 名 称 课 程 名 称 课 程 性 质 合 考 人 数 实 际 人 数 考 试 教 室 考 试 段 考 试 时 间 (2015-2016-2)-0006178-04247-1 130101 测 试 技 术 基 础 学 科 基 础 必 修 课 35 35 1 教 401 17 周
More information珠江钢琴股东大会
证 券 代 码 :002678 证 券 简 称 : 珠 江 钢 琴 公 告 编 号 :2015-038 广 州 珠 江 钢 琴 集 团 股 份 有 限 公 司 2015 年 年 度 股 东 大 会 决 议 公 告 本 公 司 及 董 事 会 全 体 成 员 保 证 信 息 披 露 的 内 容 真 实 准 确 完 整, 没 有 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏 特 别 提 示 :
More information科 学 出 版 社 科 学 出 版 社 前 言 本 书 是 针 对 普 通 高 等 院 校 经 济 类 和 工 商 管 理 类 本 科 专 业 财 务 管 理 学 的 教 学 需 求, 结 合 教 育 部 经 济 管 理 类 本 科 财 务 管 理 学 课 程 教 学 大 纲 编 写 而 成 的 本 书 执 笔 者 都 是 长 期 工 作 在 财 务 管 理 教 学 一 线 的 专 业 教 师,
More informationMicrosoft Word - 第7章 图表反转形态.doc
第 七 章 图 表 反 转 形 态 我 们 知 道 市 场 趋 势 共 有 三 种 : 上 升 趋 势 下 降 趋 势 和 横 向 整 理 市 场 的 价 格 波 动 都 是 运 行 在 这 三 种 趋 势 中, 所 有 的 走 势 都 是 这 三 种 趋 势 的 排 列 组 合 如 图 市 场 趋 势 结 构 示 意 图 7-1 所 示 市 场 趋 势 结 构 示 意 图 7-1 图 市 场 趋
More information国债回购交易业务指引
附 件 1 上 海 证 券 交 易 所 新 质 押 式 国 债 回 购 交 易 业 务 指 引 一 总 述 根 据 上 海 证 券 交 易 所 债 券 交 易 实 施 细 则, 上 证 所 将 于 2006 年 5 月 8 日 起 推 出 新 质 押 式 国 债 回 购 新 质 押 式 回 购 与 现 行 质 押 式 回 购 相 比 区 别 主 要 在 以 下 几 个 方 面 :1 新 质 押 式
More information1600 1000 40 50 2030 2000 采 取 行 动 的 机 会 90% 开 拓 成 功 的 道 路 2
简 略 版 本 :2015 3 10 2016 2021 全 球 卫 生 部 门 病 毒 性 肝 炎 战 略 2016 2021 2015 3 12 2012 2010 2014 2015 2016 2021 140 55% 35% 5 15% 5 20% 2.4 1.3 1.5 1 1600 1000 40 50 2030 2000 采 取 行 动 的 机 会 90% 开 拓 成 功 的 道 路
More information0 年 上 半 年 评 价 与 考 核 细 则 序 号 部 门 要 素 值 考 核 内 容 考 核 方 式 考 核 标 准 考 核 ( 扣 原 因 ) 考 评 得 3 安 全 生 产 目 30 无 同 等 责 任 以 上 道 路 交 通 亡 人 事 故 无 轻 伤 责 任 事 故 无 重 大 质 量
0 年 上 半 年 评 价 与 考 核 细 则 序 号 部 门 要 素 值 考 核 内 容 考 核 方 式 考 核 标 准 无 同 等 责 任 以 上 道 路 交 通 亡 人 事 故 3 无 轻 伤 责 任 事 故 目 标 30 及 事 无 重 大 质 量 工 作 过 失 故 管 无 其 他 一 般 责 任 事 故 理 在 公 司 文 明 环 境 创 建 中, 无 工 作 过 失 及 被 追 究 的
More information2 熟 悉 Visual Basic 的 集 成 开 发 环 境 3 了 解 可 视 化 面 向 对 象 编 程 事 件 驱 动 交 互 式 开 发 等 基 本 概 念 4 了 解 Visual Basic 的 特 点 环 境 要 求 与 安 装 方 法 1 Visual Basic 开 发 应 用
Visual Basic 程 序 设 计 A 级 分 级 班 教 学 大 纲 ( 供 计 算 机 与 信 息 技 术 基 础 课 程 分 级 教 学 A 级 班 使 用 ) I 前 言 Visual Basic 程 序 设 计 课 程 是 一 门 计 算 机 语 言 基 础 课 程 通 过 对 该 课 程 的 学 习, 使 学 生 初 步 掌 握 Visual Basic 的 语 言 特 点, 掌
More information全国建筑市场注册执业人员不良行为记录认定标准(试行).doc
- 1 - - 2 - 附 件 全 国 建 筑 市 场 注 册 执 业 人 员 不 良 记 录 认 定 标 准 ( 试 行 ) 说 明 为 了 完 善 建 筑 市 场 注 册 执 业 人 员 诚 信 体 系 建 设, 规 范 执 业 和 市 场 秩 序, 依 据 相 关 法 律 法 规 和 部 门 规 章, 根 据 各 行 业 特 点, 我 部 制 订 了 全 国 建 筑 市 场 注 册 执 业 人
More information张 荣 芳 中 山 大 学 历 史 系 广 东 广 州 张 荣 芳 男 广 东 廉 江 人 中 山 大 学 历 史 系 教 授 博 士 生 导 师 我 们 要 打 破 以 前 学 术 界 上 的 一 切 偶 像 以 前 学 术 界 的 一 切 成 见 屏 除 我 们 要 实 地 搜 罗 材 料 到 民 众 中 寻 方 言 到 古 文 化 的 遗 址 去 发 掘 到 各 种 的 人 间 社 会 去
More information证券代码:000066 证券简称:长城电脑 公告编号:2014-000
证 券 代 码 :000066 证 券 简 称 : 长 城 电 脑 公 告 编 号 :2016-092 中 国 长 城 计 算 机 深 圳 股 份 有 限 公 司 2016 年 度 第 三 次 临 时 股 东 大 会 决 议 公 告 本 公 司 及 其 董 事 会 全 体 成 员 保 证 信 息 披 露 内 容 的 真 实 准 确 完 整, 没 有 虚 假 记 载 误 导 性 陈 述 或 重 大 遗
More information2006年顺德区高中阶段学校招生录取分数线
2014 年 顺 德 区 高 中 阶 段 学 校 考 试 提 前 批 第 一 批 第 二 批 学 校 录 取 根 据 佛 山 市 办 提 供 的 考 生 数 据, 现 将 我 区 2014 年 高 中 阶 段 学 校 考 试 提 前 批 第 一 批 第 二 批 学 校 的 录 取 公 布 如 下 : 一 顺 德 一 中 录 取 分 第 1 志 愿, 总 分 585, 综 合 表 现 评 价 A, 考
More information<4D F736F F D D323630D6D0B9FAD3A6B6D4C6F8BAF2B1E4BBAFB5C4D5FEB2DFD3EBD0D0B6AF C4EAB6C8B1A8B8E6>
中 国 应 对 气 候 变 化 的 政 策 与 行 动 2013 年 度 报 告 国 家 发 展 和 改 革 委 员 会 二 〇 一 三 年 十 一 月 100% 再 生 纸 资 源 目 录 前 言... 1 一 应 对 气 候 变 化 面 临 的 形 势... 3 二 完 善 顶 层 设 计 和 体 制 机 制... 4 三 减 缓 气 候 变 化... 8 四 适 应 气 候 变 化... 20
More information<4D6963726F736F667420576F7264202D20B9D8D3DAB0BABBAAA3A8C9CFBAA3A3A9D7D4B6AFBBAFB9A4B3CCB9C9B7DDD3D0CFDEB9ABCBBE32303132C4EAC4EAB6C8B9C9B6ABB4F3BBE1B7A8C2C9D2E2BCFBCAE92E646F6378>
上 海 德 载 中 怡 律 师 事 务 所 关 于 昂 华 ( 上 海 ) 自 动 化 工 程 股 份 有 限 公 司 二 〇 一 二 年 年 度 股 东 大 会 法 律 意 见 书 上 海 德 载 中 怡 律 师 事 务 所 上 海 市 银 城 中 路 168 号 上 海 银 行 大 厦 1705 室 (200120) 电 话 :8621-5012 2258 传 真 :8621-5012 2257
More information上海证券交易所会议纪要
附 件 上 海 市 场 首 次 公 开 发 行 股 票 网 下 发 行 实 施 细 则 第 一 章 总 则 第 一 条 为 规 范 拟 在 上 海 证 券 交 易 所 ( 以 下 简 称 上 交 所 ) 上 市 的 公 司 首 次 公 开 发 行 股 票 网 下 发 行 业 务, 提 高 首 次 公 开 发 行 股 票 网 下 申 购 及 资 金 结 算 效 率, 根 据 证 券 发 行 与 承 销
More information教师上报成绩流程图
教 务 管 理 系 统 使 用 说 明 学 生 端 用 户 1 在 校 内 任 何 一 台 连 接 校 园 网 的 计 算 机 上 登 录 教 务 处 主 页 教 务 处 主 页 地 址 : http://jw.stdu.edu.cn/homepage 随 后 点 击 按 钮 ( 见 下 图 所 示 ), 即 可 进 入 综 合 教 务 管 理 系 统 2 在 综 合 教 务 管 理 区 域 内 键
More informationHSK( 一 级 ) 考 查 考 生 的 日 常 汉 语 应 用 能 力, 它 对 应 于 国 际 汉 语 能 力 标 准 一 级 欧 洲 语 言 共 同 参 考 框 架 (CEF) A1 级 通 过 HSK( 一 级 ) 的 考 生 可 以 理 解 并 使 用 一 些 非 常 简 单 的 汉 语
新 汉 语 水 平 考 试 HSK 为 使 汉 语 水 平 考 试 (HSK) 更 好 地 服 务 于 汉 语 学 习 者, 中 国 国 家 汉 办 组 织 中 外 汉 语 教 学 语 言 学 心 理 学 和 教 育 测 量 学 等 领 域 的 专 家, 在 充 分 调 查 了 解 海 外 实 际 汉 语 教 学 情 况 的 基 础 上, 吸 收 原 有 HSK 的 优 点, 借 鉴 近 年 来 国
More information现 场 会 议 时 间 为 :2016 年 5 月 19 日 网 络 投 票 时 间 为 :2016 年 5 月 18 日 -2016 年 5 月 19 日 其 中 通 过 深 圳 证 券 交 易 所 交 易 系 统 进 行 网 络 投 票 的 时 间 为 2016 年 5 月 19 日 9:30-
证 券 代 码 :300439 证 券 简 称 : 美 康 生 物 公 告 编 号 :2016-046 宁 波 美 康 生 物 科 技 股 份 有 限 公 司 2015 年 度 股 东 大 会 决 议 公 告 公 司 及 董 事 会 全 体 成 员 保 证 信 息 披 露 的 内 容 真 实 准 确 完 整, 没 有 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏 特 别 提 示 : 1 2016
More informationETF、分级基金规模、份额变化统计20130816
ETF 分 级 基 金 规 模 份 额 变 化 统 计 截 至 上 周 末, 全 市 场 股 票 型 ETF 规 模 约 1451 亿, 份 额 约 1215 亿,ETF 总 份 额 及 规 模 的 周 变 动 值 分 别 为 -23-44 亿, 份 额 与 规 模 均 下 降 ; 分 级 基 金 规 模 约 438 亿, 份 额 572 亿, 总 份 额 及 规 模 的 周 变 动 值 分 别 为
More information对 当 前 小 说 艺 术 倾 向 的 分 析 陈 晓 明 人 民 性 是 一 个 现 代 性 概 念 近 年 来 艺 术 上 趋 于 成 熟 的 一 批 作 家 倾 向 于 表 现 底 层 民 众 苦 难 的 生 活 这 使 他 们 的 作 品 具 有 现 实 主 义 的 显 著 特 征 在 对 苦 难 生 活 的 把 握 中 对 人 物 性 格 和 命 运 的 展 示 中 这 些 小 说 在 人
More information编号:
编 号 : 企 业 内 高 技 能 人 才 培 养 评 价 实 施 方 案 ( 仅 适 用 于 企 业 特 有 行 业 特 有 工 种 ) 实 施 单 位 ( 公 章 ) 申 报 日 期 年 _ 月 日 1 企 业 内 高 技 能 人 才 培 养 评 价 项 目 实 施 方 案 申 报 表 项 目 名 称 等 级 项 目 性 质 课 时 申 报 单 位 联 系 人 通 讯 地 址 电 话 手 机 电
More information3 月 30 日 在 中 国 证 券 报 上 海 证 券 报 证 券 时 报 证 券 日 报 和 上 海 证 券 交 易 所 网 站 上 发 出 召 开 本 次 股 东 大 会 公 告, 该 公 告 中 载 明 了 召 开 股 东 大 会 的 日 期 网 络 投 票 的 方 式 时 间 以 及 审
北 京 市 君 致 律 师 事 务 所 关 于 浪 潮 软 件 股 份 有 限 公 司 2015 年 度 股 东 大 会 的 法 律 意 见 书 致 : 浪 潮 软 件 股 份 有 限 公 司 北 京 市 君 致 律 师 事 务 所 ( 以 下 简 称 本 所 ) 受 浪 潮 软 件 股 份 有 限 公 司 ( 以 下 简 称 公 司 ) 的 委 托, 指 派 律 师 出 席 2016 年 4 月
More information马 克 思 主 义 公 正 观 的 基 本 向 度 及 方 法 论 原 则!! # #
马 克 思 主 义 公 正 观 的 基 本 向 度 及 方 法 论 原 则 马 俊 峰 在 社 会 公 正 问 题 的 大 讨 论 中 罗 尔 斯 诺 齐 克 哈 耶 克 麦 金 泰 尔 等 当 代 西 方 思 想 家 的 论 述 被 反 复 引 用 和 申 说 而 将 马 克 思 恩 格 斯 等 经 典 作 家 的 观 点 置 于 一 种 被 忽 视 甚 至 被 忘 却 的 状 态 形 成 这 种
More informationMicrosoft Word - 文件汇编.doc
北 京 市 中 医 管 理 局 二 一 五 年 四 月 ... 1... 18 2015... 30 京 中 医 政 字 [2014]160 号 1 2 一 充 分 认 识 中 医 健 康 乡 村 建 设 工 作 的 重 要 意 义 二 建 立 健 全 工 作 保 障 机 制 2014 12 15 三 做 好 工 作 启 动 的 准 备 事 宜 1 2014 12 15 5-10 2014 12 15
More information第二讲 数列
Togisu XueD Persolized Eduio Developme Ceer 高 考 中 不 等 式 问 题 的 解 决 方 法 通 润 达 久 王 力 前 言 : 近 年 来 不 等 式 问 题 正 越 来 越 多 的 出 现 在 调 研 题 和 高 考 试 题 中 而 且 大 多 出 现 在 江 苏 高 考 的 填 空 压 轴 题 中 是 高 考 考 察 的 重 点 和 难 点 由 于
More information金 不 少 于 800 万 元, 净 资 产 不 少 于 960 万 元 ; (3) 近 五 年 独 立 承 担 过 单 项 合 同 额 不 少 于 1000 万 元 的 智 能 化 工 程 ( 设 计 或 施 工 或 设 计 施 工 一 体 ) 不 少 于 2 项 ; (4) 近 三 年 每 年
工 程 设 计 与 施 工 资 质 标 准 一 总 则 建 筑 智 能 化 工 程 设 计 与 施 工 资 质 标 准 ( 一 ) 为 了 加 强 对 从 事 建 筑 智 能 化 工 程 设 计 与 施 工 企 业 的 管 理, 维 护 建 筑 市 场 秩 序, 保 证 工 程 质 量 和 安 全, 促 进 行 业 健 康 发 展, 结 合 建 筑 智 能 化 工 程 的 特 点, 制 定 本 标
More information<4D6963726F736F667420576F7264202D2050485035C3E6CFF2B6D4CFF3A3A8B5DAC8FDD5C220C0E0CCD8D0D4A3A92E646F63>
第 三 章 PHP5 面 向 对 象 高 级 类 特 性 这 一 周 来 正 好 白 天 没 课, 赶 出 来 这 章 宝 宝 出 生 将 近 一 个 月, 快 10 斤 重 了 宝 宝 快 张 大, 你 想 编 程 么? 宝 宝 妈 说, 做 这 个 行 业 太 累 了 刀 客 羽 朋 于 石 家 庄 2006-11-23 1 目 录 3.1 static 变 量 方 法...3 3.1.1 静
More information登录、注册功能的测试用例设计.doc
注 册 登 陆 测 试 用 例 和 修 改 密 码 测 试 用 例 完 整 版 摘 自 网 络, 狗 狗 整 理 zqh139@126.com 修 改 历 史 日 期 版 本 作 者 修 改 内 容 评 审 号 变 更 控 制 号 2010-11-25 1.0 初 稿 2011-09-17 2.0 整 理 一 注 册 测 试 用 例 序 号 : 1 控 件 名 称 : 功 能 描 述 : 注 册 编
More information目 录 一 系 统 访 问... 1 二 门 户 首 页 申 报 用 户 审 核 用 户... 2 三 系 统 登 录 用 户 名 密 码 登 录 新 用 户 注 册 用 户 登 录 已 注 册 用
水 路 运 输 建 设 综 合 管 理 信 息 系 统 - 门 户 系 统 用 户 手 册 二 零 一 五 年 十 一 月 目 录 一 系 统 访 问... 1 二 门 户 首 页... 1 1. 申 报 用 户... 1 2. 审 核 用 户... 2 三 系 统 登 录... 4 1. 用 户 名 密 码 登 录... 4 1.1 新 用 户 注 册... 4 1.2 用 户 登 录... 7
More information<4D6963726F736F667420576F7264202D20B6C0C1A2B6ADCAC2D0ECCCFABEFDCFC8C9FABCB0CCE1C3FBC8CBC9F9C3F72E646F63>
证 券 代 码 :000420 证 券 简 称 : 吉 林 化 纤 公 告 编 号 :2010-20 吉 林 化 纤 股 份 有 限 公 司 第 六 届 董 事 会 独 立 董 事 提 名 人 声 明 提 名 人 吉 林 化 纤 股 份 有 限 公 司 董 事 会 现 提 名 徐 铁 君 先 生 为 本 公 司 第 六 届 董 事 会 独 立 董 事 候 选 人, 并 发 表 公 开 声 明, 被
More information附 件 : 上 海 市 建 筑 施 工 企 业 施 工 现 场 项 目 管 理 机 构 关 键 岗 位 人 员 配 备 指 南 二 一 四 年 九 月 十 一 日 2
公 开 上 海 市 城 乡 建 设 和 管 理 委 员 会 文 件 沪 建 管 2014 758 号 上 海 市 城 乡 建 设 和 管 理 委 员 会 关 于 印 发 上 海 市 建 筑 施 工 企 业 施 工 现 场 项 目 管 理 机 构 关 键 岗 位 人 员 配 备 指 南 的 通 知 各 区 县 建 设 和 交 通 委 员 会 : 为 进 一 步 加 强 对 建 设 工 程 施 工 现
More information( 二 ) 现 行 统 一 高 考 制 度 不 利 于 培 养 人 的 创 新 精 神,,,,,,,,,,,,, [ ],,,,,,,,,,, :, ;,,,,,,? ( 三 ) 现 行 统 一 高 考 制 度 不 利 于 全 体 学 生 都 获 得 全 面 发 展,, [ ],,,,,,,,,,,
( ) ( )... 李 雪 岩, 龙 耀 (. 广 西 民 族 大 学 商 学 院, 广 西 南 宁 ;. 中 山 大 学 教 育 学 院, 广 东 广 州 ) : 高 等 教 育 是 专 业 教 育 高 考 是 为 高 等 教 育 服 务 的, 是 为 高 等 专 业 教 育 选 拔 有 专 业 培 养 潜 质 的 人 才 现 行 高 考 制 度 忽 略 专 业 潜 质 的 因 素, 过 份 强
More information抗 战 时 期 国 民 政 府 的 银 行 监 理 体 制 探 析 % # % % % ) % % # # + #, ) +, % % % % % % % %
抗 战 时 期 国 民 政 府 的 银 行 监 理 体 制 探 析 王 红 曼 抗 战 时 期 国 民 政 府 为 适 应 战 时 经 济 金 融 的 需 要 实 行 由 财 政 部 四 联 总 处 中 央 银 行 等 多 家 机 构 先 后 共 同 参 与 的 多 元 化 银 行 监 理 体 制 对 战 时 状 态 下 的 银 行 发 展 与 经 营 安 全 进 行 了 大 规 模 的 设 计 与
More information<433A5C55736572735C6B73625C4465736B746F705CB9FABCCAD6D0D2BDD2A9D7A8D2B5B8DFBCB6BCBCCAF5D6B0B3C6C6C0C9F3C9EAC7EBD6B8C4CFA3A832303136CDA8D3C3B0E6A3A92E646F63>
附 件 1 国 际 中 药 专 业 高 级 技 术 职 称 评 审 条 件 及 报 名 材 料 一 系 列 ( 一 ) 中 1 高 级 专 科 ( 副 ) 高 级 专 科 ( 副 ) 1 取 得 中 专 科 职 称 后, 独 立 从 事 中 临 床 实 践 5 年 以 上 2 取 得 中 博 士 学 位 后, 临 床 实 践 2 年 以 上 3 取 得 中 硕 士 学 位 后, 临 床 实 践 7
More information3 复 试 如 何 准 备 4 复 试 成 绩 计 算 5 复 试 比 例 6 复 试 类 型 7 怎 么 样 面 对 各 种 复 试 04 05
1 复 试 流 程 2 复 试 考 查 形 式 02 03 3 复 试 如 何 准 备 4 复 试 成 绩 计 算 5 复 试 比 例 6 复 试 类 型 7 怎 么 样 面 对 各 种 复 试 04 05 2 怎 样 给 导 师 留 下 良 好 的 第 一 印 象 把 握 进 门 时 机 1 面 试 中 穿 着 的 瞒 天 过 海 3 无 声 胜 有 声 的 肢 体 语 言 育 4 眼 睛 是 心
More information一、资质申请
二 工 程 监 理 企 业 资 质 有 关 问 答 111 什 么 样 的 企 业 可 以 在 本 省 申 请 工 程 监 理 企 业 资 质? 答 : 在 鄂 取 得 法 人 营 业 执 照 或 合 伙 企 业 营 业 执 照 的 企 业, 都 可 依 法 向 工 商 注 册 所 在 省 或 市 建 设 行 政 主 管 部 门 行 政 审 批 部 门 申 请 工 程 监 理 企 业 资 质 取 得
More information名 称 生 命 科 学 学 院 083001 环 境 科 学 1 生 物 学 仅 接 收 院 内 调 剂, 初 试 分 数 满 足 我 院 生 物 学 复 试 最 低 分 数 线 生 命 科 学 学 院 071300 生 态 学 5 生 态 学 或 生 物 学 生 命 科 学 学 院 040102
华 中 师 范 大 学 2016 年 接 收 校 内 外 优 秀 硕 士 研 究 生 调 剂 信 息 表 名 称 经 济 与 工 商 管 理 学 院 020101 政 治 经 济 学 1 经 济 学 类 毕 业 学 校 与 报 考 学 校 不 低 于 我 校 办 学 层 次 经 济 与 工 商 管 理 学 院 020105 世 界 经 济 学 1 经 济 学 类 毕 业 学 校 与 报 考 学 校
More information课程类 别
美 声 演 唱 方 向 培 养 方 案 一 培 养 目 标 本 方 向 要 求 学 生 德 智 体 美 全 面 发 展, 培 养 能 在 文 艺 团 体 从 事 声 乐 演 唱 及 能 在 艺 术 院 校 从 事 本 方 向 教 学 的 高 级 门 人 才 二 培 养 规 格 本 方 向 学 生 应 系 统 掌 握 声 乐 演 唱 方 面 的 理 论 和 技 能, 具 备 较 高 的 声 乐 演 唱
More information一 从 分 封 制 到 郡 县 制 一 从 打 虎 亭 汉 墓 说 起
县 乡 两 级 的 政 治 体 制 改 革 如 何 建 立 民 主 的 合 作 新 体 制 县 乡 人 大 运 行 机 制 研 究 课 题 组 引 言 一 从 分 封 制 到 郡 县 制 一 从 打 虎 亭 汉 墓 说 起 二 密 县 在 周 初 是 两 个 小 国 密 国 和 郐 国 三 密 县 的 第 一 任 县 令 卓 茂 四 明 清 时 代 的 密 县 二 从 集 中 的 动 员 体
More information类 似 地, 又 可 定 义 变 下 限 的 定 积 分 : ( ). 与 ψ 统 称 为 变 限 积 分. f ( ) d f ( t) dt,, 注 在 变 限 积 分 (1) 与 () 中, 不 可 再 把 积 分 变 量 写 成 的 形 式 ( 例 如 ) 以 免 与 积 分 上 下 限 的
5 ( 一 ) 微 积 分 学 基 本 定 理 当 函 数 的 可 积 性 问 题 告 一 段 落, 并 对 定 积 分 的 性 质 有 了 足 够 的 认 识 之 后, 接 着 要 来 解 决 一 个 以 前 多 次 提 到 过 的 问 题 在 定 积 分 形 式 下 证 明 连 续 函 数 必 定 存 在 原 函 数. 一 变 限 积 分 与 原 函 数 的 存 在 性 设 f 在 [,] 上
More information第 四 条 建 设 单 位 对 可 能 产 生 职 业 病 危 害 的 建 设 项 目, 应 当 依 照 本 办 法 向 安 全 生 产 监 督 管 理 部 门 申 请 职 业 卫 生 三 同 时 的 备 案 审 核 审 查 和 竣 工 验 收 建 设 项 目 职 业 卫 生 三 同 时 工 作 可
第 51 号 建 设 项 目 职 业 卫 生 三 同 时 监 督 管 理 暂 行 办 法 已 经 2012 年 3 月 6 日 国 家 安 全 生 产 监 督 管 理 总 局 局 长 办 公 会 议 审 议 通 过, 现 予 公 布, 自 2012 年 6 月 1 日 起 施 行 国 家 安 全 生 产 监 督 管 理 总 局 骆 琳 二 一 二 年 四 月 二 十 七 日 建 设 项 目 职 业
More information电信系教学大纲的基本规范
兰 州 大 学 信 息 科 学 与 工 程 学 院 Java 语 言 程 序 设 计 实 验 教 学 大 纲 一. 课 程 基 本 信 息 : 实 验 课 程 编 号 : 课 程 名 称 : Java 语 言 程 序 设 计 实 验 课 课 程 性 质 : 非 单 列 实 验 课 课 程 类 型 : 必 做 课 程 负 责 人 : 马 俊 等 适 用 专 业 : 计 算 机 科 学 与 技 术 专
More information光明乳业股份有限公司
光 明 乳 业 股 份 有 限 公 司 非 公 开 发 行 A 股 股 票 募 集 资 金 存 放 与 实 际 使 用 情 况 的 专 项 报 告 及 审 核 报 告 截 至 2012 年 12 月 31 日 止 审 核 报 告 光 明 乳 业 股 份 有 限 公 司 全 体 股 东 : 德 师 报 ( 核 ) 字 (13) 第 E0019 号 我 们 审 核 了 后 附 的 光 明 乳 业 股 份
More informationTemplate BR_Rec_2005.dot
ITU-R BT.1789 建 议 书 1 ITU-R BT.1789 建 议 书 在 分 组 视 频 传 输 中 利 用 传 输 误 码 信 息 重 建 接 收 视 频 的 方 法 (ITU-R 44/6 和 ITU-R 109/6 课 题 ) (2007 年 ) 范 围 本 建 议 书 对 业 务 提 供 商 重 建 接 收 视 频 的 方 法 做 了 详 细 介 绍, 以 便 利 用 传 输
More information抗 日 战 争 研 究 年 第 期
田 子 渝 武 汉 抗 战 时 期 是 国 共 第 二 次 合 作 的 最 好 时 期 在 国 共 合 作 的 基 础 上 出 现 了 抗 日 救 亡 共 御 外 侮 的 局 面 这 个 大 好 局 面 的 出 现 与 中 共 长 江 局 的 丰 功 伟 绩 是 分 不 开 的 但 长 期 以 来 由 于 有 一 个 王 明 的 右 倾 错 误 直 接 影 响 了 对 它 的 全 面 科 学 准 确
More information目 录 关 于 图 标... 3 登 陆 主 界 面... 3 工 单 管 理... 5 工 单 列 表... 5 搜 索 工 单... 5 工 单 详 情... 6 创 建 工 单... 9 设 备 管 理 巡 检 计 划 查 询 详 情 销 售 管
宝 汇 德 Turbocare 微 服 务 系 统 客 户 操 作 手 册 Version 2.0 北 京 宝 汇 德 技 术 服 务 器 有 限 公 司 技 术 研 发 部 目 录 关 于 图 标... 3 登 陆 主 界 面... 3 工 单 管 理... 5 工 单 列 表... 5 搜 索 工 单... 5 工 单 详 情... 6 创 建 工 单... 9 设 备 管 理... 10 巡
More information工 程 勘 察 资 质 标 准 根 据 建 设 工 程 勘 察 设 计 管 理 条 例 和 建 设 工 程 勘 察 设 计 资 质 管 理 规 定, 制 定 本 标 准 一 总 则 ( 一 ) 本 标 准 包 括 工 程 勘 察 相 应 专 业 类 型 主 要 专 业 技 术 人 员 配 备 技 术
住 房 和 城 乡 建 设 部 关 于 印 发 工 程 勘 察 资 质 标 准 的 通 知 建 市 [2013]9 号 各 省 自 治 区 住 房 和 城 乡 建 设 厅, 北 京 市 规 划 委, 天 津 上 海 市 建 设 交 通 委, 重 庆 市 城 乡 建 设 委, 新 疆 生 产 建 设 兵 团 建 设 局, 总 后 基 建 营 房 部 工 程 局, 国 务 院 有 关 部 门 建 设 司,
More information黄 金 原 油 总 持 仓 增 长, 同 比 增 幅 分 别 为 4.2% 和 4.1% 而 铜 白 银 以 及 玉 米 则 出 现 减 持, 减 持 同 比 减 少 分 别 为 9.4%,9.4% 以 及 6.5% 大 豆, 豆 粕 结 束 连 续 4 周 总 持 仓 量 增 长, 出 现 小 幅
小 麦 净 多 持 仓 增 加, 豆 油 豆 粕 净 多 持 仓 减 少 美 国 CFTC 持 仓 报 告 部 门 : 市 场 研 究 与 开 发 部 类 型 : 量 化 策 略 周 报 日 期 :212 年 5 月 7 日 电 话 :592-5678753 网 址 :www.jinyouqh.com 主 要 内 容 : 根 据 美 国 CFTC 公 布 的 数 据, 本 报 告 中 的 11 个
More information中 中 中 中 部 中 岗 位 条 件 历 其 它 历 史 师 地 理 师 生 物 师 体 与 健 康 师 04 05 06 07 从 事 中 历 史 工 从 事 中 地 理 工 从 事 中 生 物 工 从 事 中 体 与 健 康 工 2. 课 程 与 论 ( 历 史 ); 2. 科 ( 历 史 )
中 中 中 部 中 26 年 系 统 事 业 公 开 计 划 岗 位 条 件 历 其 它 数 师 英 语 师 物 理 师 02 0 从 事 中 数 工 从 事 中 英 语 工 从 事 中 物 理 工 2. 课 程 与 论 ( 数 ); 2. 科 ( 数 );. 数 ; 4. 基 础 数 ; 5. 计 算 数 ; 6. 概 率 论 与 数 理 统 计 ; 7. 应 用 数 ; 8. 数. 课 程 与
More information伊 犁 师 范 学 院 611 语 言 学 概 论 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 2-2 语 言 学 纲 要 笔 记, 由 考 取 本 校 本 专 业 高 分 研 究 生 总 结 而 来, 重 点 突 出, 借 助 此 笔 记 可 以 大 大 提 高 复 习 效
伊 犁 师 范 学 院 611 语 言 学 概 论 全 套 考 研 资 料 ......2 伊 犁 师 范 学 院 802 文 学 概 论 全 套 考 研 资 料 ......2 伊 犁 师 范 学 院 702 普 通 物 理 全 套 考 研 资 料 ......3 伊 犁
More information定 位 和 描 述 : 程 序 设 计 / 办 公 软 件 高 级 应 用 级 考 核 内 容 包 括 计 算 机 语 言 与 基 础 程 序 设 计 能 力, 要 求 参 试 者 掌 握 一 门 计 算 机 语 言, 可 选 类 别 有 高 级 语 言 程 序 设 计 类 数 据 库 编 程 类
全 国 计 算 机 等 级 考 试 调 整 方 案 2011 年 7 月, 教 育 部 考 试 中 心 组 织 召 开 了 第 五 届 全 国 计 算 机 等 级 考 试 (NCRE) 考 委 会 会 议, 会 议 完 成 NCRE 考 委 会 换 届 选 举, 并 确 定 了 下 一 步 改 革 和 发 展 的 目 标 在 新 的 历 史 时 期,NCRE 将 以 保 持 稳 定 为 前 提 以
More information正 规 培 训 达 规 定 标 准 学 时 数, 并 取 得 结 业 证 书 二 级 可 编 程 师 ( 具 备 以 下 条 件 之 一 者 ) (1) 连 续 从 事 本 职 业 工 作 13 年 以 上 (2) 取 得 本 职 业 三 级 职 业 资 格 证 书 后, 连 续 从 事 本 职 业
1. 职 业 概 况 1.1 职 业 名 称 可 编 程 师 1.2 职 业 定 义 可 编 程 师 国 家 职 业 标 准 从 事 可 编 程 序 控 制 器 (PLC) 选 型 编 程, 并 对 应 用 进 行 集 成 和 运 行 管 理 的 人 员 1.3 职 业 等 级 本 职 业 共 设 四 个 等 级, 分 别 为 : 四 级 可 编 程 师 ( 国 家 职 业 资 格 四 级 ) 三
More information导 数 和 微 分 的 概 念 导 数 的 几 何 意 义 和 物 理 意 义 函 数 的 可 导 性 与 连 续 性 之 间 的 关 系 平 面 曲 线 的 切 线 和 法 线 导 数 和 微 分 的 四 则 运 算 基 本 初 等 函 数 的 导 数 复 合 函 数 反 函 数 隐 函 数 以
2015 年 考 研 数 学 二 考 试 大 纲 考 试 科 目 : 高 等 数 学 线 性 代 数 考 试 形 式 和 试 卷 结 构 一 试 卷 满 分 及 考 试 时 间 试 卷 满 分 为 150 分, 考 试 时 间 为 180 分 钟. 二 答 题 方 式 答 题 方 式 为 闭 卷 笔 试. 三 试 卷 内 容 结 构 高 等 教 学 约 78% 线 性 代 数 约 22% 四 试 卷
More information西 南 民 族 学 院 学 报 哲 学 社 会 科 学 版 第 卷 资 料 来 源 中 国 统 计 年 鉴 年 年 新 中 国 五 十 年 统 计 资 料 汇 编 中 国 人 口 统 计 年 鉴 年 数 据 资 料 来 源 中 国 统 计 年 鉴 中 国 统 计 出 版 社 年 版 资 料 来 源
郑 长 德 教 育 的 发 展 人 力 资 源 的 开 发 是 决 定 西 部 民 族 地 区 未 来 发 展 的 关 键 因 素 之 一 是 实 施 西 部 大 开 发 战 略 提 高 其 经 济 竞 争 力 和 综 合 实 力 的 重 要 保 障 本 文 从 西 部 民 族 地 区 教 育 发 展 的 现 状 入 手 指 出 中 华 人 民 共 和 国 成 立 多 年 来 西 部 民 族 地 区
More informationMicrosoft Word - 中节能_工业项目节能评估审查导则Draft.doc
0 -------------------------------------------------------------------------------- 2 ----------------------------------------------------------------------------- 2 节 评 ----------------------------------------------------------------------------------------------------
More information2014年中央财经大学研究生招生录取工作简报
2015 年 中 央 财 经 大 学 研 究 生 招 生 录 取 工 作 简 报 一 硕 士 研 究 生 招 生 录 取 情 况 2015 年 共 有 8705 人 报 考 我 校 硕 士 研 究 生, 其 中 学 术 型 研 究 生 报 考 3657 人, 专 业 硕 士 研 究 生 报 考 5048 人 ; 总 报 考 人 数 较 2014 年 增 长 1.4%, 学 术 型 报 考 人 数 较
More information第 六 章 债 券 股 票 价 值 评 估 1 考 点 一 : 债 券 价 值 的 影 响 因 素 2
Professional Accounting Education Provided by Academy of Professional Accounting (APA) CPA 财 务 管 理 习 题 班 第 八 讲 债 券 股 票 价 值 评 估 IreneGao ACCAspace 中 国 ACCA 国 际 注 册 会 计 师 教 育 平 台 Copyright ACCAspace.com
More information新, 各 地 各 部 门 ( 单 位 ) 各 文 化 事 业 单 位 要 高 度 重 视, 切 实 加 强 领 导, 精 心 组 织 实 施 要 根 据 事 业 单 位 岗 位 设 置 管 理 的 规 定 和 要 求, 在 深 入 调 查 研 究 广 泛 听 取 意 见 的 基 础 上, 研 究 提
广 西 壮 族 自 治 区 人 事 厅 广 西 壮 族 自 治 区 文 化 厅 文 件 桂 人 发 2009 42 号 关 于 印 发 广 西 壮 族 自 治 区 文 化 事 业 单 位 岗 位 设 置 结 构 比 例 指 导 标 准 的 通 知 各 市 人 事 局 文 化 局, 区 直 各 部 门 ( 单 位 ): 根 据 人 事 部 印 发 的 事 业 单 位 岗 位 设 置 管 理 试 行 办
More information北京信息科技大学本科学生成绩管理办法
北 京 信 息 科 技 大 学 文 件 校 教 发 2012 113 号 关 于 印 发 北 京 信 息 科 技 大 学 本 科 学 生 成 绩 管 理 办 法 的 通 知 各 相 关 单 位 : 现 将 北 京 信 息 科 技 大 学 本 科 学 生 成 绩 管 理 办 法 印 发 给 你 们, 请 遵 照 执 行 北 京 信 息 科 技 大 学 2012 年 12 月 17 日 1 北 京 信
More information论 华 兹 华 斯 塌 毁 的 茅 舍 的 主 题 与 叙 事 技 巧 的 统 一 李 增 王 云 在 塌 毁 的 茅 舍 一 诗 中 华 兹 华 斯 综 合 运 用 了 指 涉 主 题 的 叙 事 行 动 以 及 控 制 读 者 情 感 发 展 的 叙 事 节 奏 有 条 不 紊 地 引 导 读 者 经 历 了 心 灵 之 旅 最 终 与 叙 述 者 一 道 得 到 心 灵 的 训 诫 因 此 只
More information一 开 放 性 的 政 策 与 法 规 二 两 岸 共 同 的 文 化 传 承 三 两 岸 高 校 各 自 具 有 专 业 优 势 远 见 杂 志 年 月 日
河 北 师 范 大 学 学 报 新 时 期 海 峡 两 岸 高 校 开 放 招 生 问 题 探 讨 郑 若 玲 王 晓 勇 海 峡 两 岸 高 校 开 放 招 生 是 新 时 期 推 进 海 峡 两 岸 高 等 教 育 交 流 与 合 作 的 重 要 尝 试 系 统 梳 理 改 革 开 放 以 来 两 岸 招 生 政 策 与 就 学 人 数 发 展 变 化 的 历 史 进 程 可 发 现 促 进 两
More information¹ º ¹ º 农 业 流 动 人 口 是 指 户 口 性 质 为 农 业 户 口 在 流 入 地 城 市 工 作 生 活 居 住 一 个 月 及 以 上 的 流 动 人 口 非 农 流 动 人 口 是 指 户 口 性 质 为 非 农 户 口 在 流 入 地 城 市 工 作 生 活 居 住 一 个
¹ 改 革 开 放 年 来 人 口 流 动 规 模 持 续 增 加 对 我 国 社 会 经 济 的 持 续 发 展 起 到 了 重 要 作 用 为 全 面 了 解 我 国 流 动 人 口 生 存 状 况 准 确 把 握 流 动 人 口 发 展 规 律 和 趋 势 不 断 加 强 流 动 人 口 服 务 管 理 引 导 人 口 有 序 流 动 合 理 分 布 国 家 人 口 计 生 委 于 年 月 启
More informationi 1) 系 统 运 作 前 设 定 *1. [2.1 网 页 主 机 名 称 设 定 ] -- 设 定 校 务 系 统 的 主 机 IP 地 址, 以 供 其 他 个 人 电 脑 连 接 及 使 用 该 系 统 *2. [2.3.1 输 入 / 修 改 学 校 资 料 ] -- 输 入 系 统 使
校 务 系 统 使 用 步 骤 说 明 手 册 简 介 此 手 册 是 配 合 校 务 系 统 使 用 手 册 编 辑 的, 因 此 必 须 同 时 参 考 校 务 系 统 使 用 手 册, 以 获 知 更 详 细 的 使 用 说 明 此 手 册 主 要 记 载 几 项 较 为 复 杂 事 务 的 处 理 步 骤 及 说 明, 以 让 使 用 者 更 容 易 掌 握 及 使 用 校 务 系 统 其
More information<4D6963726F736F667420576F7264202D20BFC9B1E0B3CCD0F2BFD8D6C6CFB5CDB3C9E8BCC6CAA6B9FABCD2D6B0D2B5B1EAD7BC2E646F63>
国 家 职 业 标 准 1 可 编 程 序 控 制 系 统 设 计 师 国 家 职 业 标 准 1. 职 业 概 况 1.1 职 业 名 称 可 编 程 序 控 制 系 统 设 计 师 1.2 职 业 定 义 从 事 可 编 程 序 控 制 器 (PLC) 选 型 编 程, 并 对 应 用 系 统 进 行 设 计 集 成 和 运 行 管 理 的 人 员 1.3 职 业 等 级 本 职 业 共 设 四
More information随着执业中医师资格考试制度的不断完善,本着为我校中医学专业认证服务的目的,本文通过对我校中医类毕业生参加2012年和2013年的中医执业医师考试成绩及通过率、掌握率进行分析,并与全国的平均水平进行差异比较分析,以此了解我校执业中医师考试的现状,进而反映我校中医类课程总体教学水平,发现考核知识模块教学中存在的不足,反馈给相关学院和教学管理部门,以此提高教学和管理水平。
2012-2013 中 医 类 别 执 业 医 师 综 合 笔 试 成 绩 分 析 反 馈 报 告 教 务 处 二 零 一 三 年 三 月 1 目 录 1 前 言 3 2 2012-2013 中 医 类 别 执 业 医 师 综 合 笔 试 成 绩 分 析 反 馈 报 告 4 附 件 1:2012 年 中 医 类 别 医 师 资 格 综 合 笔 试 院 校 学 科 成 绩 分 析 报 告 附 件 2:2013
More information白皮书
应 用 安 全 支 撑 平 台 (ASSP ASSP) 2010 年 12 月 1 版 权 声 明 : 本 文 件 中 出 现 的 全 部 内 容, 除 另 有 特 别 注 明, 版 权 均 属 上 海 格 尔 软 件 股 份 有 限 公 司 ( 以 下 简 称 格 尔 软 件 ) 所 有, 未 经 格 尔 软 件 书 面 许 可, 任 何 人 不 得 以 任 何 形 式 擅 自 拷 贝 传 播 复
More information2 2015 年 8 月 11 日, 公 司 召 开 2015 年 第 五 次 临 时 股 东 大 会, 审 议 通 过 了 关 于 公 司 <2015 年 股 票 期 权 激 励 计 划 ( 草 案 )> 及 其 摘 要 的 议 案 关 于 提 请 股 东 大 会 授 权 董 事 会 办 理 公
证 券 代 码 :300017 证 券 简 称 : 网 宿 科 技 公 告 编 号 :2016-053 网 宿 科 技 股 份 有 限 公 司 关 于 调 整 公 司 2015 年 股 票 期 权 激 励 计 划 激 励 对 象 股 票 期 权 数 量 和 行 权 价 格 的 公 告 本 公 司 及 董 事 会 全 体 成 员 保 证 公 告 内 容 真 实 准 确 和 完 整, 没 有 虚 假 记
More information5 436060469-B-002 行 政 处 罚 在 气 象 探 测 环 境 保 护 范 围 内 从 事 危 害 气 象 探 测 环 境 活 动 的 处 罚 中 华 人 民 共 和 国 气 象 法 第 三 十 五 条 第 一 款 第 二 项 6 436060469-B-003 行 政 处 罚 在
权 力 清 单 目 录 部 门 ( 公 章 ): 填 表 日 期 :2015-8-10 代 码 权 力 类 型 职 权 名 称 法 定 依 据 工 作 流 程 工 作 时 限 实 施 主 体 承 办 科 室 1 436060469-A-001 行 政 许 可 防 雷 装 置 设 计 审 核 和 竣 工 验 收 国 务 院 对 确 需 保 留 的 行 政 审 批 项 目 设 定 行 政 许 可 的 决
More information·岗位设置管理流程
实 施 岗 位 设 置 岗 位 设 置 编 码 受 控 状 态 执 行 心 门 行 政 人 力 资 控 制 门 总 经 办 源 各 职 能 门 行 政 人 力 资 源 总 经 办 总 经 理 根 据 公 司 发 展 战 略 进 行 职 能 分 解 和 机 构 设 置 工 作 分 析 根 据 人 力 资 源 规 划 确 定 编 制 意 见 职 责 划 分 与 岗 位 设 置 制 作 职 务 说 明 书
More information收 入 支 出 项 目 2016 年 预 算 项 目 2016 年 预 算 预 算 01 表 单 位 : 万 元 ( 保 留 两 位 小 数 ) 一 公 共 财 政 预 算 拨 款 50.06 一 人 员 经 费 23.59 1 一 般 财 力 50.06 1 人 员 支 出 21.95 2 成 品
100.12 2016 年 龙 岩 市 部 门 预 算 表 报 送 日 期 : 年 月 日 单 位 负 责 人 签 章 : 财 务 负 责 人 签 章 : 制 表 人 签 章 : 收 入 支 出 项 目 2016 年 预 算 项 目 2016 年 预 算 预 算 01 表 单 位 : 万 元 ( 保 留 两 位 小 数 ) 一 公 共 财 政 预 算 拨 款 50.06 一 人 员 经 费 23.59
More information合 并 计 算 配 售 对 象 持 有 多 个 证 券 账 户 的, 多 个 证 券 账 户 市 值 合 并 计 算 确 认 多 个 证 券 账 户 为 同 一 配 售 对 象 持 有 的 原 则 为 证 券 账 户 注 册 资 料 中 的 账 户 持 有 人 名 称 有 效 身 份 证 明 文 件
深 圳 市 场 首 次 公 开 发 行 股 票 网 下 发 行 实 施 细 则 ( 征 求 意 见 稿 ) 第 一 章 总 则 第 一 条 为 规 范 深 圳 市 场 首 次 公 开 发 行 股 票 网 下 发 行 行 为, 根 据 证 券 发 行 与 承 销 管 理 办 法 及 相 关 规 定, 制 定 本 细 则 第 二 条 本 细 则 所 称 网 下 发 行 是 指 首 次 公 开 发 行 股
More information投 资 者 可 在 基 金 管 理 人 指 定 的 销 售 机 构 申 购 和 赎 回 美 元 等 外 币 销 售 的 基 金 份 额, 具 体 详 见 基 金 管 理 人 相 关 公 告 2 在 三 申 购 与 赎 回 的 原 则 部 分 增 加 : 1 本 基 金 采 用 多 币 种 销 售,
博 时 基 金 管 理 有 限 公 司 关 于 修 订 博 时 大 中 华 亚 太 精 选 股 票 证 券 投 资 基 金 基 金 合 同 及 托 管 协 议 部 分 条 款 的 公 告 为 满 足 投 资 者 的 理 财 需 求, 根 据 博 时 大 中 华 亚 太 精 选 股 票 证 券 投 资 基 金 基 金 合 同 ( 以 下 简 称 原 基 金 合 同 ) 的 有 关 约 定, 博 时 基
More information用节点法和网孔法进行电路分析
运 用 节 点 法 和 网 孔 法 进 行 电 路 分 析 众 所 周 知, 运 用 基 尔 霍 夫 定 律 和 欧 姆 定 律, 我 们 可 以 对 任 何 一 个 电 路 进 行 分 析, 以 确 定 其 运 行 条 件 ( 电 流 和 电 压 值 ) 一 般 电 路 分 析 的 难 点 在 于 用 最 少 的 联 立 方 程 描 述 电 路 的 运 行 特 性 在 这 一 讲 里, 我 们 将
More information!!!!!
美 国 旧 金 山 湾 区 田 野 调 查 札 记 !!!!! ! 个 案 一 男 士 年 龄 岁 籍 贯 沈 阳! !! 个 案 二 女 士 年 龄 岁 籍 贯 沈 阳!! !!! 一 新 古 典 经 济 学 移 民 理 论 的 解 释!! 二 制 度 层 面 的 原 因! 三 社 会 资 本 理 论 与 东 北 人 移 民 网 络 !!!!!! 四 社 会 关 系 网 络 资 源 配 置 理 论
More information2. 本 次 修 改 后, 投 资 者 申 购 新 股 的 持 有 市 值 要 求 市 值 计 算 规 则 及 证 券 账 户 使 用 的 相 关 规 定 是 否 发 生 了 变 化? 答 : 未 发 生 变 化 投 资 者 申 购 新 股 的 持 有 市 值 是 指, 以 投 资 者 为 单 位
新 股 网 上 网 下 发 行 实 施 细 则 问 答 上 交 所 2016-01-05 一 网 上 发 行 业 务 问 答 1. 本 次 修 改 的 主 要 内 容 是 什 么? 答 : 本 次 修 改 的 主 要 内 容 包 括 : 一 是 取 消 了 投 资 者 在 申 购 委 托 时 应 全 额 缴 纳 申 购 资 金 的 规 定, 明 确 了 投 资 者 应 根 据 最 终 确 定 的 发
More information三门峡市质量技术监督局清单公示
附 件 4 卢 氏 县 财 政 局 行 政 职 权 运 行 流 程 图 一 行 政 处 罚 类 1. 第 1 项 一 般 程 序 流 程 图 案 件 来 源 初 步 确 认 违 法 事 实, 责 令 停 止 违 法 行 为 县 财 政 局 立 案 审 批 综 合 股 登 记 立 案 调 查 取 证 不 予 立 案 综 合 股 撰 写 调 查 终 结 报 告 移 送 有 关 部 门 综 合 股 提 出
More information自 服 务 按 钮 无 法 访 问 新 系 统 的 自 服 务 页 面 因 此 建 议 用 户 从 信 网 中 心 (http://nc.tju.edu.cn) 主 页, 右 下 角 位 置 的 常 用 下 载, 或 校 园 网 用 户 自 服 务 (http://g.tju.edu.cn) 首 页
校 园 网 认 证 计 费 系 统 变 更 说 明 及 使 用 帮 助 为 提 高 校 园 网 的 可 靠 性 和 可 用 性, 提 升 用 户 的 上 网 体 验, 同 时 也 为 解 决 近 期 校 园 网 无 法 认 证 或 登 录 页 面 弹 出 缓 慢 的 问 题, 信 网 中 心 于 近 期 对 校 园 网 认 证 计 费 系 统 进 行 升 级 切 换 现 将 升 级 后 新 系 统
More information境 外 上 市 外 资 股 股 东 持 有 股 份 总 数 (H 股 ) 489,157,907 3 出 席 会 议 的 股 东 所 持 有 表 决 权 股 份 数 占 公 司 有 表 决 权 股 份 总 数 的 64.2869 其 中 :A 股 股 东 持 股 占 股 份 总 数 的 61.390
证 券 代 码 :603993 证 券 简 称 : 洛 阳 钼 业 公 告 编 号 :2016-080 洛 阳 栾 川 钼 业 集 团 股 份 有 限 公 司 2016 年 第 三 次 临 时 股 东 大 会 2016 年 第 二 次 A 股 类 别 股 东 大 会 及 2016 年 第 二 次 H 股 类 别 股 东 大 会 决 议 公 告 本 公 司 董 事 会 及 全 体 董 事 保 证 本
More information<4D6963726F736F667420576F7264202D20B3D6B2D6CFDEB6EEB1EDB8F1D7EED6D52E646F63>
国 内 各 期 货 交 易 所 关 于 合 约 限 仓 方 面 的 规 定 上 海 期 货 交 易 所 经 纪 会 员 非 经 纪 会 员 和 客 户 的 期 货 合 约 在 不 同 时 期 限 仓 的 具 体 比 例 和 数 额 如 下 : ( 单 位 : ) 合 约 挂 牌 至 交 割 月 前 第 二 月 的 最 后 一 个 交 易 日 交 割 月 前 第 一 月 交 割 月 份 某 一 期 货
More information全国教师资格认定管理信息系统
操 作 说 明 一 教 师 资 格 认 定 申 请 人 1 : 1. 未 参 加 全 国 统 考 申 请 人 2.1 登 录 未 参 加 全 国 统 考 申 请 人 网 上 报 名 系 统 登 录 中 国 教 师 资 格 网 (http://www.jszg.edu.cn), 未 参 加 全 国 统 考 申 请 人 有 两 种 途 径 进 入 报 名 系 统 第 一 种 途 径 : 点 击 网 站
More information<4D F736F F D20D6D8D3CA3535BAC5B9D8D3DAD3A1B7A2A1B6D6D8C7ECD3CAB5E7B4F3D1A7D1A7CABFD1A7CEBBCADAD3E8B9A4D7F7CFB8D4F2A1B7B5C4CDA8D6AA2E646F63>
重 邮 2015 55 号 关 于 印 发 重 庆 邮 电 大 学 学 士 学 位 授 予 工 作 细 则 的 通 知 各 相 关 单 位 : 现 将 重 庆 邮 电 大 学 学 士 学 位 授 予 工 作 细 则 印 发 你 们, 请 遵 照 执 行 重 庆 邮 电 大 学 2015 年 3 月 18 日 1 重 庆 邮 电 大 学 学 士 学 位 授 予 工 作 细 则 第 一 章 总 则 第
More information<4D6963726F736F667420576F7264202D20B8BDBCFE34A3BAD2A9C6B7B2B9B3E4C9EAC7EBD7A2B2E1CAC2CFEEBCB0C9EAB1A8D7CAC1CFD2AAC7F32E646F63>
附 件 4: 药 品 补 充 申 请 注 册 事 项 及 申 报 资 料 要 求 一 注 册 事 项 ( 一 ) 国 家 食 品 药 品 监 督 管 理 局 审 批 的 补 充 申 请 事 项 : 1. 持 有 新 药 证 书 的 药 品 生 产 企 业 申 请 该 药 品 的 批 准 文 号 2. 使 用 药 品 商 品 名 称 3. 增 加 中 药 的 功 能 主 治 天 然 药 物 适 应 症
More information2.5 选 举 陈 晓 非 女 士 为 第 六 届 董 事 会 董 事 候 选 人 的 议 案 ; 2.6 选 举 卢 婕 女 士 为 第 六 届 董 事 会 董 事 候 选 人 的 议 案 ; 2.7 选 举 张 文 君 先 生 为 第 六 届 董 事 会 独 立 董 事 候 选 人 的 议 案
证 券 代 码 :000982 证 券 简 称 : 中 银 绒 业 公 告 编 号 :2014-83 宁 夏 中 银 绒 业 股 份 有 限 公 司 董 事 会 关 于 召 开 2014 年 第 五 次 临 时 股 东 大 会 网 络 投 票 流 程 的 提 示 公 告 本 公 司 及 董 事 会 全 体 成 员 保 证 信 息 披 露 的 内 容 真 实 准 确 完 整, 没 有 虚 假 记 载
More information工 程 造 价 咨 询 企 业 管 理 系 统 操 作 手 册 目 录 1 造 价 企 业 登 录... 1 2 企 业 基 本 信 息 查 看... 3 3 企 业 人 员 信 息 查 看... 4 4 企 业 基 本 信 息 操 作... 5 4.1 企 业 简 介... 5 4.2 企 业 章
工 程 造 价 咨 询 企 业 管 理 系 统 操 作 手 册 工 程 造 价 咨 询 企 业 管 理 系 统 ( 造 价 企 业 ) 用 户 手 册 工 程 造 价 咨 询 企 业 管 理 系 统 操 作 手 册 目 录 1 造 价 企 业 登 录... 1 2 企 业 基 本 信 息 查 看... 3 3 企 业 人 员 信 息 查 看... 4 4 企 业 基 本 信 息 操 作... 5 4.1
More information股票代码:000936
证 券 代 码 :000936 证 券 简 称 : 华 西 股 份 公 告 编 号 :2016-031 江 苏 华 西 村 股 份 有 限 公 司 二 0 一 五 年 度 股 东 大 会 决 议 公 告 本 公 司 及 董 事 会 全 体 成 员 保 证 信 息 披 露 内 容 的 真 实 准 确 和 完 整, 没 有 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏 特 别 提 示 : 1
More information