这本书涉及了"Java"本地接口(JNI)。如果你对下列情况感兴趣,这本书将对你有用:
.整合带有例如"C"或 C++"语言编写的传统代码的 Java 应用程序。
.用例如"C"或 C++"语言编写的已存在的程序来实现 Java 虚拟机。
.实现一个 Java 虚拟机(Java virtual machine)
.理解在语言互操作性上的技术说明,特别是怎样处理例如垃圾收集和多线程的特性。
首先,这本书是为开发者写的。在"JNI"各种特性上的丰富的各种讨论,和在怎样有效的使用"JNI"的有帮助的提示后,你将能发现很容易按部就班的开始使用"JNI"。"JNI"在 1997 年初初始发布。这本书总结了,在"Sun"微系统(Sun Microsystem)上工程师和还有在技术交流社区中大量的开发者,获得的两年经验。
第二,这本书体现了各种"JNI"特性的设计基本原理。不仅学术界感兴趣这个,而且十分透彻的实际理解也是高效使用 JNI 的先决条件。
第三,这个书的一部分是为"Java 2"平台的"JNI"定义规范。JNI 编程可以使用这个规范当作参考说明书。Java 虚拟机的实现必须按照规范来一致实现。
"JNI"的设计引来了在"Sun Microsystems"和 Java 技术授权之间的一些列争论。"JNI"是来自"Netscape"的 JRI(Java Runtime Interface)的部分进化而来,"JNI"是"Warren Harris"设计的。来自 Java 技术授权公司的许多人积极地参与了设计的讨论。他们包括 Russ Arun(Microsoft), Patrick Beard(Apple),Simon Nash(IBM),Ken Root(Intel),Ian Ellision-Taylor(Microsoft), and Mike Toutoghi(Microsoft)。
"JNI"的设计也大量地得益于 Sun 内部设计评论,这评论来自 Dave Bowen, James Gosling, Peter Kessler, Tim Lindholm, Mark Reinhold, Derek White and Frank Yellin。Dave Brown, Dave Connelly, James McIlree, Benjamin Renaud, andTom Rodrigues 对"JNI"在"Java 2 SDK 1.2"上的增强做出了有意义的贡献。在俄罗斯新西伯利亚(Novosibirsk)的兼容性测试的 Carla Schroer的团队为"JNI"写了兼容性测试程序。在这过程中,他们发现了原始规范不清楚或不完整的地方。
"JNI"技术没有 Dave Bowen, Larry Abrahams, Dick Neiss, Jon Kannegaard,and Alan Baraz 的管理支持将不能被开发和部署。我得到来自我的经理 Dave Bowen 的强有力地支持和鼓励来写这本书。Tim Lindholm,《The Java Virtual Machine Specification》的作者,在"JNI"被设计时,正主导 Java 虚拟机开发。Tim 在虚拟机和本机接口上做了引领性的工作,提倡"JNI"的使用和为这书增加了严密性和清晰度。为这本书的封面的厨房和餐厅的艺术设计,他也提供初始的草图。
这本书得益于许多同事的帮助。Anand Palaniswamy 写了第十章关于一般陷阱和缺陷(on common traps and pitfalls)的部分。Janet Keonig 细心地预读初始的草稿和贡献了许多哦有用的意见。Beth Stearns 根据在线的 JNI 指南写了第二章的草稿。
我从 Craig J.Bordelon, Michael Brundage, Mary Dageforde, Joshua Engel and Elliott Hughes 处得到关于这本书草稿有价值的评论。Lisa Friendly, The Java Series 的编者,有助于这本书的编写和出版。Ken Arnold, The Java Programming Language 得到作者,首先提出了 JNI 书的编写。我要感谢在整个过程中 Mike hedrikson 和 Marina Lang 给的帮助和耐心在 Addison-Wesley 出版社。Diance 监督了生产流程从复制,编辑和最后的打印。
在过去的几年里,我和一群在 Sun Micorsystems 上的 Java 软件中有才能和奉献的人一起,有特权的工作,特别是 original,HotSpot and Sun Labs 虚拟机团队成员。这本书献给他们。
第一部分,介绍和指南(Part One: Introduction and Tutorial)
第一章 介绍
"JNI"是"Java"平台的一个强大的功能。使用"JNI"的应用程序能能混合用例如"C"和"C++"语言编写的本地代码(native code),和用 Java 编程语言编写的代码。"JNI"允许编程人员,在不丢弃在传统编码上的投入,来利用 Java 平台功能。因为"JNI"是"Java"平台的一部分,编程人员立马解决互操作的问题,同时解决和 Java 平台的所有的实现一起工作的问题。
这本书是"JNI"的编程指导和参考说明。书包含三个部分:
.第二章通过简单的例子,介绍"JNI"。这个说明,是给不熟悉"JNI"的初始使用者的。
.第三章到第十章构建了编程者的指南,这给出了大量 JNI 功能的全面介绍。我们通过一系列短而详细描述的例子来展示"JNI"不同的功能,和展示被证明在"JNI"编程中有用的技术。
.第十一章到第十三章为所有的 JNI 类型和函数,展示明确的规范。这些章也被组织为参考说明服务。
这本书尝试吸引广泛的用户,他们对 JNI 不同需求的。这指南和编程引导是为初始编程者,但有经验的开发者和 JNI 的实现者可以找到更有用的参考章节在这指南和编程引导中。大多数读者将可能是开发者,他们用"JNI"来写应用程序。这本书的"你"术语将暗指用"JNI"编程的开发者(program with the JNI)。相反是"JNI"实现者(JNI implementors)或使用"JNI"写的应用程序的终端用户。
这本书假设你有"Java,C 和 C++"编程语言的基本知识。如果没有,你可以参考许多有用的优秀的书本:Ken Arnold and James Gosling(Addison-Wesley,1998)写的"The Java Programming Language, Second Edittion", Brian Kernighan and Dennis Ritchie(Prentice Hall,1988)写的"The
C Programming Language, Second Edition"和 Bjarne Stroustrup(Addison-Wesley 1997)写的"The C++ Programming Language, Third Edition".
这章剩余的部分介绍 JNI 的背景,作用和演化。
1.1 The Java Platform and Host Environment(Java 平台和主机环境)这本书时间用 Java 编程语言和用本地编程语言(C,C++等(etc.))来写应用程序.让我们先为这些语言,明确正确的编程环境区域。
"Java"平台的编程环境包含"Java"虚拟机(VM)和 Java 应用程序编程的接口(Java Application Programming Interface(API))。"Java"应用程序是用"Java"编程语言编写的,被编译成一个独立于机器(machine-independent)二进制类格式.一个类在任何 Java 虚拟机上执行实现。Java 的API 包含预定义的类集合。Java"平台的任何实现被假设支持 Java 编程语言,虚拟机和"API"。
主机环境(host environment)术语代表主机操作系统,本地库组,和 CPU 指令集。用本地变成语言(native programming languages)如"C"和"C++"编写本地应用程序(Native application),被编译特定主机的二进制编码,和被连接到本地库。本地应用程序和本地库是典型依赖于特
定主机环境。为一个操作系统建立的一个"C"应用程序,例如,典型不能呢工作在另一操作系统上。
"Java"平台被一般的配置在主机环境的上面。例如,"JRE"(Java Runtime Enviroment)是"Sun"产品,它支持"Java"平台运行在例如"Solaris"和"Windows"的存在操作系统上。"Java"平台提供一组特性,应用程序能依赖独立于底下的主机环境。
1.2 Role of the JNI(JNI 的作用)
当"Java"平台被配置在主机环境的顶层上,平台对于允许"Java"应用程序,带有用其他语言编写地本机编码工作,是需要或必须的。编程者已经开始采用 Java 平台来建立用"C"和"C++"编写的传统的应用程序。因为在遗留代码上存在投资价值,然而,"Java"应用程序将和"C"
和"C++"代码共存许多年。 JNI 的一个强大的特性是允许你来利用"Java"平台,但利用的代码仍然用其他语言来编写。作为"Java"虚拟机(Jave virtual machine)执行的一部分,"JNI"是一个双向接口,允许 Java 应用程序调用本地代码,反之亦然(vice versa)。Figure 1.1(图 1.1)说明"JNI"的作用。
Java application <-> Java virtual machine (JNI) <-> Native application and library implementation and library | | |-> Host enviroment <----| Figure 1.1 Role of JNI
"JNI"被设计为处理你需要联合"Java"应用程序和本地代码的情况。做为一个双向接口,"JNI"能支持两种本地编码:本地库(native libraries)和本地应用程序(native application)。
.你能使用"JNI"来编写,允许 Java 应用程序来调用在本地库中实现的函数的本地方法(native method)。"Java"应用程序,通过和他们调用在 Java 编程语言中实现的方法一样办法,调用本地方法。然而幕后,本地方法是用另一种语言实现的和位于本地库中。
."JNI"支持一个调用接口(invocation interface),这个接口允许你嵌入一个 Java 虚拟机执行到你本地应用程序中。本地应用程序能和执行 Java 虚拟机的本地库链接,同样因此用调用接口来执行用 Java 编程语言编写的软件控件。例如,一个用"C"写的"web"浏览器能在嵌入式 Java虚拟机执行中执行下载"applets"。
1.3 Implications of Using the JNI(使用 JNI 的影响)
记住一旦一个应用程序使用了 JNI,它冒险失去了 Java 平台的两个好处。
首先,依赖"JNI"的"Java"应用程序不再可以在多种主机环境中运行。即使用 Java 编程语言编写的应程序的部分可移植到多种主机环境,它将需要重新编译用本地编程语言编写的应用程序的部分。
其次,Java 编程语言的类型安全和可靠,然而本地语言例如"C"或"C++"是没有的。因此,当你用 JNI 来写应用程序时你必须额外地细心。一个有恶意的本地方法可能破坏整个应用程序。因为这个原因,Java 应用程序在调用 JNI 特性前,接受了安全检查。
作为一般规则,你应该构建应用程序时,在尽量少的类中定义本地方法。这就意味着在本地代码和应用程序剩余代码之间有一个明显的隔离。
1.4 When to Use the JNI(什么时间使用 JNI)
在你从事一个使用"JNI"的工程前,后退一步调查一下是不是有根合理的替代方案是值得的。像上一章提到的,当和严格用"Java"编程语言写的应用程序比时,使用"JNI"的应用程序有固有的缺点。例如,你失去 Java 编程语言的类型安全保证。
大量的可选方案也允许"Java"应用程序和其他语言编写的代码互操作的。例如:
."Java"应用程序通过一个"TCP/IP"链接和其他进程间通信机制(other inter-process communication(IPC) mechanisms)来和本地应用程序交流。
.一个"Java"应用程序可以通过"JDBC API"连接到原来的数据库上。
.一个"Java"应用程序可以利用分布式对象技术例如"Java IDL API"
这些替代方案的一般特征是"Java"应用程序和本地代码放在不同的进程中(在一些案例中在不同的机器上).进程隔离提供了一个重要的好处。进程提供了地址空间的保护能够最大限度的错误隔离,一个奔溃的本地应用程序不会立马终止通过"TCP/IP"和它通讯的"Java"应用程
序。
然而有时,你可以发现对于"Java"应用程序必须和驻留在一样进程中(resides in the same process)的本地代码交流。这是"JNI"很有用的时候。思考,例如,下面的情况:
."Java API"可能不支持应用需要的某个依赖主机的特性。例如:一个应用程序可能需要执行特别的文件操作,但 Java API 不支持。然而通过另一个进程来操作文件是繁琐和低效的。
.你可能需要访问一个存在的本地库,不愿意花费在不同进程间的数据的拷贝和复制的开销。在同一个进程中载入本地库是更有效率的。
.横跨多个进程的应用程序可能导致不可接受的内存占用。如果这些进程需要驻留在同一个客户端机器上,这是真确的。载入一个本地库到存在本机进程中,应用程序需要比启动一个新的进程并载入这个库到新进程中需要的更少的系统资源。
.你可能需要在一个低级语言中执行一小段时间要求严格的代码(实时反应的代码)(time-critical code),例如汇编。如果一个"3D"增强应用程序消耗大量的时间在图形绘制中,你可以发现必须用汇编代码写图形库的核心部分来达到最好性能。
总之,如果你的 Java 应用程序必须和驻留在一个进程中的本地代码互操作,就得用"JNI".
1.5 Evolution of the JNI(JNI 的演化)
从"Java"平台的很早的时候,对于"Java"应用程序对和本地代码互操作的需要的就被认识。"Java"平台的第一版本,"JDK(Java Development Kit) release 1.0", 就包含一个本地方法接口。它允许Java应用程序调用其他语言如"C"和"C++"编写的函数。许多第三方的应用程序和Java
类库的实现(例如,包扩 java.lang,java.io and java.net),都依赖本地方法接口来访问在底层主机环境中的特性。
【下载地址】
百度网盘链接:https://pan.baidu.com/s/1C6HAa0HgzQFfdLgn-jqBqw
提取码:aiaf
相关文章
使用-JFreeChart来创建基于web的图表
XStream使用文档
WebService发布过程及常见问题
webpack实战入门进阶调优分享
weblogic调优参数及监控指标
weblogic节点管理
weblogic管理控制台概述
weblogic-部署和启动
WebLogic-Server-性能及调优-调优-Java-虚拟机
Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。
FlashFXP绿色版网盘下载,附激活教程 1778
FlashFxp百度网盘下载链接:https://pan.baidu.com/s/1MBQ5gkZY1TCFY8A7fnZCfQ。FlashFxp是功能强大的FTP工具
Adobe Fireworks CS6 Ansifa绿色精简版网盘下载 1564
firework可以制作精美或是可以闪瞎眼的gif,这在广告领域是需要常用的,还有firework制作下logo,一些原创的图片还是很便捷的,而且fireworks用法简单,配合dw在做网站这一块往往会发挥出很强大的效果。百度网盘下载链接:https://pan.baidu.com/s/1fzIZszfy8VX6VzQBM_bdZQ
navicat for mysql中文绿色版网盘下载 1623
Navicat for Mysql是用于Mysql数据库管理的一款图形化管理软件,非常的便捷和好用,可以方便的增删改查数据库、数据表、字段、支持mysql命令,视图等等。百度网盘下载链接:https://pan.baidu.com/s/1T_tlgxzdQLtDr9TzptoWQw 提取码:y2yq
火车头采集器(旗舰版)绿色版网盘下载 1706
火车头采集器是站长常用的工具,相比于八爪鱼,简洁好用,易于配置。火车头能够轻松的抓取网页内容,并通过自带的工具对内容进行处理。站长圈想要做网站,火车头采集器是必不可少的。百度网盘链接:https://pan.baidu.com/s/1u8wUqS901HgOmucMBBOvEA
Photoshop(CS-2015-2023)绿色中文版软件下载 1822
安装文件清单(共46G)包含Window和Mac OS各个版本的安装包,从cs到cc,从绿色版到破解版,从安装文件激活工具,应有尽有,一次性打包。 Photoshop CC绿色精简版 Photoshop CS6 Mac版 Photoshop CC 2015 32位 Photoshop CC 2015 64位 Photoshop CC 2015 MAC版 Photoshop CC 2017 64位 Adobe Photoshop CC 2018 Adobe_Photoshop_CC_2018 Photoshop CC 2018 Win32 Photoshop CC 2018 Win64