- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
序
这四种情况下你会用到本书:
1、 在 Java 程序中复用以前写过的 C/C++ 代码。
2、 自己实现一个 java 虚拟机
3、 学习不同语言如何进行协作,尤其是如何实现垃圾回收和多线程。
4、 把一个虚拟机实现整合到用 C/C++ 写的程序中。
本书是写给开发者的。 JNI 在 1997 年第一次发布,本书总结了 SUN 工程师和大量开发者两
年来积累的经验。
本书介绍了 JNI 的设计思想,对这种思想的理解是使用 JNI 的各种特性的基础。
本书有一部分是 JAVA2 平台上面的 JNI 特征的规范说明。 JNI 程序员可以把这部分用作一个
手册。 JVM 开发者在实现虚拟机的时候必须遵守这些规范。
JNI 的部分设计思想来源于 Netscape 的 Java Runtime Interface(JRI) 。
第一章 简介
JNI 是 JAVA 平台的一个重要特征,使用它我们可以重用以前用 C/C++ 写的大量代码。本书
既是一个编程指南也是一个 JNI 手册。本书共包括三部分:
1、 第二章通过一个简单的例子介绍了 JNI 。它的对象是对 JNI 不熟悉的初学者。
2、 3~10 章对 JNI 的特征进行了系统的介绍。我们会举大量的例子来说明 JNI 的各个特征,
这些特征都是 JNI 中重要且常用的。
3、 11~13 章是关于 JNI 的技术规范。可以把这两章当作一个手册。
本书尽量去满足各类读者的需要。指南面向初学者,手册面向有经验的人和自己实现 JNI
规范的人。大部分读者可能是用 JNI 来写程序的开发者。本书会假设你有 JAVA ,C/C++ 基
础。
本章的剩余部分介绍了 JNI 的背景,扮演的角色和 JNI 的演化。
1.1 JAVA 平台和系统环境( Host Environment )
系统环境代指本地操作系统环境,它有自己的本地库和 CPU 指令集。本地程序( Native
Applications )使用 C/C++ 这样的本地语言来编写,被编译成只能在本地系统环境下运行的
二进制代码, 并和本地库链接在一起。 本地程序和本地库一般地会依赖于一个特定的本地系
统环境。比如,一个系统下编译出来的 C 程序不能在另一个系统中运行。
1.2 JNI 扮演的角色
JNI 的强大特性使我们在使用 JAVA 平台的同时,还可以重用原来的本地代码。作为虚拟机
实现的一部分, JNI 允许 JAVA 和本地代码间的双向交互。
图 1.1 JNI 的角色
JNI 可以这样与本地程序进行交互:
1、 你可以使用 JNI 来实现“本地方法” (native methods ),并在 JAVA 程序中调用它们。
2、 JNI 支持一个“调用接口” (invocation interface ),它允许你把一个 JVM 嵌入到本地程序
中。本地程序可以链接一个实现了 JVM 的本地库, 然后使用 “调用接口” 执行 JAVA 语
言编写的软件模块。例如,一个用 C 语言写的浏览器可以在一个嵌入式 JVM 上面执行
从网上下载下来的 applets
1.3 JNI 的副作用
请记住,一旦使用 JNI ,JAVA 程序就丧失了 JAVA 平台的两个优点:
1、 程序不再跨平台。要想跨平台,必须在不同的系统环境下重新编译本地语言部分。
2、 程序不再是绝对安全的,本地代码的不当使用可能导致整个程序崩溃。
一个通用规则是, 你应该让本地方法集中在少数几个类当中。
文档评论(0)