本原接口(RNI)

同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。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索程序员
, jni
, 方法
, warning
, 收集器
, pragma
, JNI函数详细介绍
垃圾
微机原理与接口技术、单片机原理及接口技术、接口设计原则、微机原理与接口、接口隔离原则,以便于您获取更多的相关知识。

时间: 2024-08-18 07:03:28

本原接口(RNI)的相关文章

微软的解决方案

到本书完稿时为止,微软仍未提供对JNI的支持,只是用自己的专利方法提供了对非Java代码调用的支持.这一支持内建到编译器Microsoft JVM以及外部工具中.只有程序用Microsoft Java编译器编译,而且只有在Microsoft Java虚拟机(JVM)上运行的时候,本节讲述的特性才会有效.若计划在因特网上发行自己的应用,或者本单位的内联网建立在不同平台的基础上,就可能成为一个严重的问题. 微软与Win32代码的接口为我们提供了连接Win32的三种途径: (1) J/Direct:方

J#是什么?

问题描述 初学者请问什么是J#哪位前辈能具体介绍一下在此多谢了! 解决方案 解决方案二:初学的话不要去管J#,估计是为了让Java程序员更容易转到.net而弄出来MicrosoftVisualJ#使开发人员能够使用Java语言语法在.NETFramework上构建应用程序和服务.注意:VisualJ#已从VisualStudio2008中移除.解决方案三:VisualJ#是一种工具,供Java语言程序员用于构建在.NETFramework上运行的应用程序和服务. VisualJ#面向公共语言运行

网吧路由器接口故障的处理方法

  路由器有几个接口,每一个接口对应属性. 当网吧路由器接口出现故障时,需要及时排查解决.在讲述路由器接口故障的处理方法前,小编先简单介绍下路由器CE1接口.路由器CE1接口是将2M,一个E1用作若干个64k及其组合,这就是CE1.CE1的传输线路的带宽是2048k. 假设网吧路由器A和其他厂商的设备B通过CE1链路相连,带宽为2M,配置完成后,发现在B上有大量数据包溢出告警,在A上,当CE1接口上没有流量时,报文传输时延正常,当CE1接口上有流量时,时延达到300多秒,网速较慢. 下面是具体的

一个类如何实现两个接口中同名同参数不同返回值的函数

假设有如下两个接口: public interface IA{    string GetA(string a);}public interface IB{    int GetA(string a);} 他们都要求实现方法GetA,而且传入的参数都是一样的String类型,只是返回值一个是String一个是Int,现在我们要声明一个类X,这个类要同时实现这两个接口: public class X:IA,IB 由于接口中要求的方法的方法名和参数是一样的,所以不可能通过重载的方式来解决,那么我们该

请问下有谁调用过银联代付的接口

问题描述 请问下有谁调用过银联代付的接口 有前辈在吗,我可以贴代码,访问接口,返回值表示参数错误,我可以贴代码 解决方案 如果用java的话,可以参考以下链接的几个文件看看 http://www.chendw.cn/original/205.html 解决方案二: 贴出来吧哥们. 我也想知道

java当中的接口里面的方法全是抽象的而且是public的

问题描述 java当中的接口里面的方法全是抽象的而且是public的 java当中的接口里面的方法全是抽象的而且是public的,为什么没有abstract和public关键词修饰呢 解决方案 接口中不允许private.protected,只能是public,所以语法规定不用写了.同理,接口不能包含函数实现,肯定是abstract的.所以也不用写了. 解决方案二: 14. JAVA 枚举(Enum.类集EnumMap&EnumSet .实现接口.定义抽象方法) ----- 学习笔记

android 如何通过接口向服务器上传视频

问题描述 android 如何通过接口向服务器上传视频 在搞一个小项目 需要用到 新手 没接触过 希望会的朋友提供一个Demo 谢谢! 解决方案 你就找一个上传文件的例子就行了,不管你是视频还是图片,都一样的方式 解决方案二: http://www.cnblogs.com/top5/archive/2013/03/07/2947344.html

数据-android 地铁查询怎么查,接口在哪里找呢

问题描述 android 地铁查询怎么查,接口在哪里找呢 比如查询广州地铁,貌似不提供接口啊,数据或功能都是从哪里来了,我现在在做这方面,接口都没有.. 解决方案 你还是选择跟人家谈谈合作吧,这类接口,不是你随便能得到的 解决方案二: 当然不排除自己做数据库,自己把所有线路采集到你们自己的数据库,自己查 解决方案三: 自己采集数据去啊 .差距不大的. 解决方案四: 可以去聚合数据和易源API看看 解决方案五: 上百度api store查查,应该会有

PostgreSQL 11 preview - compress method 接口 - 暨开放接口系列

标签 PostgreSQL , 开放接口 , udf , type , index , scan , language , fdw , sample , aggregate , operator , window , storage , compress 背景 PostgreSQL是一款扩展能力极强的数据库,这也是PG可以深入各个垂直行业的原因. PostgreSQL的开放式接口 已有非常多跟进自定义接口扩展出来的插件. 下面是自定义接口对应的文档. 1.自定义函数 https://www.po