日期:2011-03-22 16:16:00 来源:本站整理
本原接口(RNI)[Java编程]
本文“本原接口(RNI)[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
同J/Direct相比,RNI是一种比非Java代码复杂得多的接口;但它的功效也非常强盛.RNI比J/Direct更接近于JVM,这也使我们能写出更有效的代码,能处理固有办法中的Java对象,并且能实现与JVM内部运行机制更精密的集成.
RNI在概念上近似Sun公司的JNI.考虑到这个缘由,并且由于该产品还没有正式竣工,所以我只在这里指出它们之间的主要差别.欲理解更具体的情形,请参考微软公司的文档.
JNI和RNI之间存在几方面惹人注目的差别.下面列出的是由msjavah生成的C头文件(微软供应的msjavah在功效上相当于Sun的javah),利用于前面在JNI例子里利用的Java类文件ShowMsgBox.
除可读性较差外,代码里还躲藏着一些技术性问题,待我一一道来./* DO NOT EDIT - automatically generated by msjavah */ #include <native.h> #pragma warning(disable:4510) #pragma warning(disable:4512) #pragma warning(disable:4610) struct Classjava_lang_String; #define Hjava_lang_String Classjava_lang_String /* Header for class ShowMsgBox */ #ifndef _Included_ShowMsgBox #define _Included_ShowMsgBox #define HShowMsgBox ClassShowMsgBox typedef struct ClassShowMsgBox { #include <pshpack4.h> long MSReserved; #include <poppack.h> } ClassShowMsgBox; #ifdef __cplusplus extern "C" { #endif __declspec(dllexport) void __cdecl ShowMsgBox_ShowMessage (struct HShowMsgBox *, struct Hjava_lang_String *); #ifdef __cplusplus } #endif #endif /* _Included_ShowMsgBox */ #pragma warning(default:4510) #pragma warning(default:4512) #pragma warning(default:4610)
在RNI中,固有办法的程序员知道对象的二进制筹划.这样便答应我们直接拜候自己但愿的信息;我们没必要象在JNI里那样得到一个字段或办法标识符.但由于并非全部虚拟机都需求将相同的二进制筹划利用于自己的对象,所以上面的固有办法只能在Microsoft JVM下运行.
在JNI中,通过JNIEnv自变量可拜候大量函数,以便同JVM打交道.在RNI中,用于掌握JVM运作的函数变成了可直接调用.它们中的某一些(如掌握非常的那一个)近似于它们的JNI“兄弟”.但大大都RNI函数都有与JNI中差别的名字和用处.
JNI和RNI最庞大的一个辨别是“垃圾汇集”的模子.在JNI中,垃圾汇集在固有办法履行期间服从与Java代码履行时相同的法则.而在RNI中,要由程序员在固有办法活动期间自行负责“垃圾汇集器”器的启动与中止.默许情形下,垃圾汇集器在进入固有办法前处于不活动状况;这样一来,程序员便可假定预备利用的对象用不着在那个时间段内举行垃圾汇集.但是一旦固有办法预备长时间履行,程序员就应考虑激活垃圾汇集器——通过调用GCEnable()这个RNI函数(GC是“Garbage Collector”的缩写,即“垃圾汇集”).
也存在与全局句柄特点近似的机制——程序员可操纵可保证特定的对象在GC活动期间不至于被当作“垃圾”收掉.概念是近似的,但名称有所差别——在RNI中,人们把它叫作GCFrames.
以上是“本原接口(RNI)[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论