混合编程jni 第九篇之Jni总结
Posted 香菜聊游戏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了混合编程jni 第九篇之Jni总结相关的知识,希望对你有一定的参考价值。
动态库的加载
可以使用标准 System.loadLibrary 从共享库加载原生代码。
关于参数传递
int、char 等这样的基本数据类型,在本地代码和JVM之间进行复制传递,
而对象是引用传递的。每一个引用都包含一个指向JVM中相应的对象的指针,
但本地代码不能直接使用这个指针,必须通过引用来间接使用。
局部引用和全局引用
传递给原生方法的每个参数,以及 JNI 函数返回的几乎每个对象都属于“局部引用”。
这意味着,局部引用在当前线程中的当前原生方法运行期间有效。
在原生方法返回后,即使对象本身继续存在,该引用也无效。
这适用于 jobject 的所有子类,包括 jclass、jstring 和 jarray。(启用扩展的 JNI 检查时,运行时会针对大部分引用误用问题向您发出警告。)
获取非局部引用的唯一方法是通过 NewGlobalRef 和 NewWeakGlobalRef 函数。
如果您希望长时间保留某个引用,则必须使用“全局”引用。
NewGlobalRef 函数将局部引用作为参数,然后返回全局引用。
在调用 DeleteGlobalRef 之前,全局引用保证有效。
一个对象从JVM传递给本地方法时,就把控制权移交了过去,
JVM会为每一个对象的传递创建一条记录,一条记录就是一个本地代码中
以上是关于混合编程jni 第九篇之Jni总结的主要内容,如果未能解决你的问题,请参考以下文章