JN系列(3):如何得到JavaVM,JNIEnv接口
来源:互联网 发布:网络唱歌比赛 编辑:程序博客网 时间:2024/04/30 12:48
Java与native code的操作有两种方式:(1)在Java中加载动态链接库(2)使用JNI Invocation inteface,在native code中创建JVM
JavaVM接口
第一种方式,在加载动态链接库的时候,JVM会调用JNI_OnLoad(JavaVM* jvm, void* reserved)(如果定义了该函数)。第一个参数会传入JavaVM指针。
第二种方式,在native code中调用JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args)可以得到JavaVM指针。
两种情况下,都可以用全局变量,比如JavaVM* g_jvm来保存获得的指针以便在任意上下文中使用。
Android系统是利用第二种方式Invocation interface来创建JVM的。
JNIEnv接口
JNI开发最常见的错误就是滥用了JNIEnv接口。需要强调的是JNIEnv是跟线程相关的。
在native method中,JNIEnv作为第一个参数传入。那么在JNIEnv不作为参数传入的时候,该如何获得它?JNI提供了两个函数:(*jvm)->AttachCurrentThread(jvm, (void**)&env, NULL)和(*jvm)->GetEnv(jvm, (void**)&env, JNI_VERSION_1_2)。两个函数都利用JavaVM接口获得JNIEnv接口,上面已经讲到如何获得JavaVM接口。
JNI规范也说明,可以将获得JNIEnv封装成一个函数。
1
2
3
4
5
6
JNIEnv* JNU_GetEnv()
{
JNIEnv* env;
(*g_jvm)->GetEnv(g_jvm, (
void
**)&env, JNI_VERSION_1_2);
return
env;
}
- JN系列(3):如何得到JavaVM,JNIEnv接口
- JNI系列(3):如何得到JavaVM,JNIEnv接口
- 如何得到JavaVM,JNIEnv接口
- 如何得到JavaVM,JNIEnv接口
- JavaVM和JNIEnv
- JavaVM和JNIEnv
- 【Android JNI】JNIEnv和JavaVM的区别
- JNIEnv和Dalvik的JavaVM的关系
- JNIEnv和Dalvik的JavaVM的关系
- Android底层JNI中的JavaVM和JNIEnv对象
- Android底层JNI中的JavaVM和JNIEnv对象
- JNI完全指南(十)——JavaVM与JNIEnv
- JNIEnv接口指针
- jn
- jn
- Android JNI开发(1)--JavaVM和 JNIEnv 动态注册本地方法
- 如何从IHTMLDOMNode 得到 IHTMLElement 接口
- JN项目-如何修改jar里面的代码
- PowerShell base operate about list
- 文件输入和输出简单示例
- 通向架构师的道路(第五天)之tomcat集群-群猫乱舞
- x264 分像素的运动估计总结
- linux的PS命令解析
- JN系列(3):如何得到JavaVM,JNIEnv接口
- 输入二十个整数来求值
- 通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计
- 1000以内所有偶数的和(解法一)
- 随机过程考试经验
- 条款8中placement new练习
- WNetAddConnection2 映射网络驱动器
- js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
- JAVA时间格式化处理