|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解
同J/Direct比拟,RNI是一种比非Java代码庞大很多的接口;但它的功效也非常壮大。RNI比J/Direct更靠近于JVM,这也使我们能写出更无效的代码,能处置固无方法中的Java对象,并且能完成与JVM外部运转机制更严密的集成。
RNI在观点上相似Sun公司的JNI。思索到这个缘故原由,并且因为该产物还没有正式竣工,以是我只在这里指出它们之间的次要差别。欲懂得更具体的情形,请参考微软公司的文档。
JNI和RNI之间存在几方面有目共睹的差别。上面列出的是由msjavah天生的C头文件(微软供应的msjavah在功效上相称于Sun的javah),使用于后面在JNI例子里利用的Java类文件ShowMsgBox。- /*DONOTEDIT-
- automaticallygeneratedbymsjavah*/
- #include<native.h>
- #pragmawarning(disable:4510)
- #pragmawarning(disable:4512)
- #pragmawarning(disable:4610)
- structClassjava_lang_String;
- #defineHjava_lang_StringClassjava_lang_String
- /*HeaderforclassShowMsgBox*/
- #ifndef_Included_ShowMsgBox
- #define_Included_ShowMsgBox
- #defineHShowMsgBoxClassShowMsgBox
- typedefstructClassShowMsgBox{
- #include<pshpack4.h>
- longMSReserved;
- #include<poppack.h>
- }ClassShowMsgBox;
- #ifdef__cplusplus
- extern"C"{
- #endif
- __declspec(dllexport)void__cdecl
- ShowMsgBox_ShowMessage(structHShowMsgBox*,
- structHjava_lang_String*);
- #ifdef__cplusplus
- }
- #endif
- #endif/*_Included_ShowMsgBox*/
- #pragmawarning(default:4510)
- #pragmawarning(default:4512)
- #pragmawarning(default:4610)
复制代码
除可读性较差外,代码里还埋没着一些手艺性成绩,待我逐一道来。
在RNI中,固无方法的程序员晓得对象的二进制结构。如许便同意我们间接会见本人但愿的信息;我们不用象在JNI里那样取得一个字段或办法标识符。但因为并不是一切假造机都必要将不异的二进制结构使用于本人的对象,以是下面的固无方法只能在MicrosoftJVM下运转。
在JNI中,经由过程JNIEnv自变量可会见大批函数,以便同JVM打交道。在RNI中,用于把持JVM运作的函数酿成了可间接挪用。它们中的某一些(如把持非常的那一个)相似于它们的JNI“兄弟”。但年夜多半RNI函数都有与JNI中分歧的名字和用处。
JNI和RNI最严重的一个区分是“渣滓搜集”的模子。在JNI中,渣滓搜集在固无方法实行时代恪守与Java代码实行时不异的划定规矩。而在RNI中,要由程序员在固无方法举动时代自行卖力“渣滓搜集器”器的启动与中断。默许情形下,渣滓搜集器在进进固无方法前处于不举动形态;如许一来,程序员便可假定筹办利用的对象用不着在谁人工夫段内举行渣滓搜集。但是一旦固无方法筹办长工夫实行,程序员就招考虑激活渣滓搜集器——经由过程挪用GCEnable()这个RNI函数(GC是“GarbageCollector”的缩写,即“渣滓搜集”)。
也存在与全局句柄特征相似的机制——程序员可使用可包管特定的对象在GC举动时代不至于被看成“渣滓”收失落。观点是相似的,但称号有所差别——在RNI中,人们把它叫作GCFrames。
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。 |
|