随笔分类 - JNI知识
【JNI知识三】--引用Java对象
摘要:原始类型,如整形、字符型等,都是可以在Java和本地代码之间进行复制的。另一方面,任意的Java对象都是通过引用进行传递的。虚拟机必须跟踪已传递给本地代码中的所有对象,以便于这些对象不被垃圾回收器释放。反过来,本地代码必须有一个方式通知虚拟机它不再需要这些对象。此外,垃圾收集器必须能够将本机代码引用的对象移除。全局和局部引用 JNI将本地代码使用的对象引用分为两类:局部引用和全局引用。局部引用在本地方法的调用过程中是有效的,并在本地方法返回时自动释放。全局引用一直有效,直到他们被显式释放。 对象被传递到本地方法并作为局部引用。JNI函数所返回的所有Java对象都是局部引用。JNI允许程...
阅读全文
【JNI知识二】--加载和链接本地方法
摘要:本地方法是使用System.loadLibrary方法进行加载。在下面的例子中,类的初始化方法加载了一个在特定平台的本地库,在这个库中定义了本地方法f:package pkg;class Cls { native double f(int i, String s); static { System.loadLibrary(“pkg_Cls”); }} System.loadLibrary方法的参数是由程序员任意选择的一个库名。该系统遵循一个标准,但特定于平台的方法来将库的名称转换到本地库的名称。例如,在Solaris系统将pkg_Cls的名称转换为libpkg_Cls.so,而W...
阅读全文
【JNI知识一】--JNI接口函数与指针
摘要:本地代码通过调用JNI函数来访问Java VM功能。JNI函数都可以使用一个接口指针来调用。接口指针是一个指向指针的指针。该指针指向一个指针数组,其中的每个指针元素都指向一个接口函数。每一个接口函数都是在接口数组中一个预定义的偏移量位置。下图说明了一个接口指针的组织机构。JNI接口的组织类似于一个C++虚函数表或COM接口。相比于使用硬连接函数,使用接口表的优点是JNI命名空间是独立于本地代码的。虚拟机可以很容易地提供多个版本的JNI函数表。例如,虚拟机可以支持两个JNI函数表:1.one performs thorough illegal argument checks, and is su
阅读全文
浙公网安备 33010602011771号