KVM 本身只带有 cldc1.1 的类库,功能十分简单,不能满足用户的需求,
本篇介绍如何对 KVM 进行扩展。
对 KVM 进行扩展,在 Java 层十分简单,只要向在编译 Java 代码时多加一
个文件就可以,没什么要说的,麻烦的是如果在加入的 Java 类中有本地操作该
怎么办?本地的 C 语言代码放在哪里编译才能够供 KVM 调用?
答案是 KNI。下面就以 KNI 为主要内容介绍如何对 KVM 加以扩展,在最
后附加一个具体的实现例子。
1. KNI 的特点:
KNI(K Native Interface)是 SUN 的 KVM(K Virtual Machine)所使用的本地方
法调用机制。
JNI(Java Native Interface)是已经为我们所熟悉的 Java 本地方法调用机制,
JNI 一般使用在 J2SE 或 J2EE 平台上,本地方法被编进动态链接库,在运行时
由 Java 虚拟机载入。
KVM 中也需要本地调用,但 JNI 是“重量级”的本地调用方式,在使用时消
耗的资源较多,所以针对 KVM 设计出了 KNI,KNI 被称为是 JNI 的一个简化版,
是“轻量级”的本地调用方式。KVM 不能加载动态链接库,所以在 KNI 机制下,
本地方法不是写在库中,而是编入虚拟机内部。
以下是 KNI 与 JNI 最重要的一些区别:
KNI 是“实现层”的 API,即它是虚拟机实现的一部分,修改 KNI 的 API 就
要重新编译虚拟机,这些 API 的细节对于 Java 程序员来说是不可见的;而 JNI
的 API 是在运行时动态加载进来的,它的修改与虚拟机无关,JNI 的 API 对于
Java 程序员来说是可见的。
KNI 的函数建在虚拟机内部,只能为此虚拟机所独享;而 JNI 的函数放在
动态链接库中,可以为多个虚拟机共用。
评论0
最新资源