参数:array 数组对象 elems 不再需要的指向数组元素的指针 mode 0=在更新数组元素后释放elems缓冲器 JNI_COMMIT=在更新数组元素后不释放elems缓冲器 JNI_ABORT=不更新数组元素释放elems缓冲器 例如: void ReleaseBooleanArrayElements(jbooleanArray array,jboolean *elems, jint mode) 产生一个新的数组,通常在反值类型为数组型时用到。 参数:len 数组中元素的个数。 例如: jbooleanArray NewBooleanArray(jsize len) 3、编译生成共享库。 使用GCC时,必须通知编译器在何处查找此Java本地方法的支持文件,并且显式通知编译器生成位置无关的代码,在我的环境中按如下过程编译: gcc-I/home/jbuilder/jdk1.3.1/include-I/home 生成Hello.o gcc -shared -Wl,-soname,libhello.so.1 生成libhello.so.1.0 接下来将生成的共享库拷贝为标准文件名 cp libhello.so.1.0 libhello.so 最后通知动态链接程序此共享文件的路径。 export LD_LIBRARY_PATH=`pwd` 4、编写一个简单的Java程序来测试我们的本地方法。 将如下源码存为ToSay.java: import Hello; 用javac编译ToSay.java,生成ToSay.class向执行普通Java程序一样使用java ToSay,我们会看到在屏幕上出现Hello,John。到这里我们就将整个的本地调用编写过程大概浏览了一遍。 应用中注意事项 1.如果可以通过TCP/IP实现Java代码与本地C/C++代码的交互工作,那么最好不使用以上提到的JNI的方式,因为一次JNI调用非常耗时,大概要花0.5~1个毫秒。 2.在一个Applet应用中,不要使用JNI。因为在 applet 中可能引发安全异常。 3.将所有本地方法都封装在单个类中,这个类调用单个 DLL。对于每种目标操作系统,都可以用特定于适当平台的版本替换这个 DLL。这样就可以将本地代码的影响减至最小,并有助于将以后所需的移植问题包含在内。 4.本地方法要简单。尽量将生成的DLL 对任何第三方运行时 DLL 的依赖减到最小。使本地方法尽量独立,以将加载DLL 和应用程序所需的开销减到最小。如果必须要运行时 DLL,则应随应用程序一起提供它们。 5.本地代码运行时,没有有效地防数组越界错误、错误指针引用带来的间接错误等。所以必须保证保证本地代码的稳定性,因为,丝毫的错误都可能导致Java虚拟机崩溃。 结束语 JNI调用规范给我们复用原有其它语言的代码提供了简单易用的接口,可以节省大量的财力,使我们可以在享受Java带来的开发速度的同时,不必放弃旧有资源。 |
闂備浇銆€閸嬫捇鏌熼婊冾暭妞ゃ儲鍨块弻鐔衡偓娑櫭慨鍥р攽椤曞棙瀚�闂備礁鎼悮顐﹀磿閸愯鑰块柛娑欐綑缂佲晠鏌熼婊冾暭妞ゃ儻鎷�>>
正在阅读:如何在Linux平台下使用JNI提高Java效率如何在Linux平台下使用JNI提高Java效率
2005-07-21 10:16
出处:
责任编辑:moningfeng
键盘也能翻页,试试“← →”键