另外,JIT(Just In Time,及时编译)技术也是一个比较好的思想。它的基本原理是,首先,通过Java编译器把Java源代码编译成与平台无关的二进制字节码。然后,在Java程序真正执行之前,系统通过JIT编译器把Java的字节码编译为本地化机器码。最后,系统执行本地化机器码,不用对字节码进行解释。这样做的优点是,大大提高了Java程序的性能,缩短了加载程序的时间;同时,由于编译的结果并不在程序运行期间保存,因此也节约了存储空间。缺点是,由于JIT编译器对所有的代码都想优化,因此同样也占用了很多时间。

动态优化技术即提前编译为机器码的技术(dynamicopttmization,ahead of time technology)是提高Java性能的另一个尝试。动态优化技术充分利用了Java源码编译、字节码编译、动态编译和静态编译的技术。其输入是Java的源码或字节码。而输出是经过高度优化的可执行代码和动态库(WindoW中是.dil文件,UNIX中是共享库.a.so文件)。其优点是能大大提高程序的性能,缺点是破坏了Java的可移植性,也对Java的安全带来了一定的隐患。

2 JNI技术

实际上,有一种通常被忽视的技术可以在很大程度上解决这个难题,那就是JNI(Java Native Interface,Java本地化方法)。图1是JNI技术实现的一般步骤。

基于嵌入式软件的JNI技术应用解析

(1)编写Java类代码

其中,需要JNI实现的方法应当用native关键字声明。在该类中,用System.1oadLibrary()方法加载需要的动态链接库。关键代码如下:

//Compute.java

public class Compute{

public native double comp (double params);

static{

//调用动态链接库

System.loadLibrary(“mathlib”);

}

(2)编译成字节代码

在这个过程中,由于采用了native关键字声明,Java编译器会忽视没有代码体的JNI方法部分。

(3)生成相关JNI方法的头文件

这个过程的实现一般是通过利用jlavah-jni * class生成的,也可以手工生成该文件;但是由于Java虚拟机是根据一定的命名规范完成对JNI方法的调用,所以手工编写头文件需要特别小心。

上述文件产生的头文件部分代码如下:

//Compute.h

;

extern“C”{

JNIEXPORT jdoubleJNICALL Java_Compute_comp(JNI-Env *, jobject, jdoubleArray);

;

JNI函数名称分为三部分:首先是Java关键字,供Java虚拟机识别;然后是调用者类名称(全限定的类名,其中用下划线代替名称分隔符);最后是对应的方法名称,各段名称之间用下划线分割。