在多线程应用程序中缓存JNI环境
Cache JNI environment in a multithreading application
我有一个使用多个线程的android应用程序(例如ui线程和网络线程)。现在我希望两个线程都能调用本机函数。此外,一些本机函数将调用java函数。
为此,需要JNIEnv*
,它因线程而异。但我认为调用GetEnv()
的效率相当低。
有没有一种方法可以缓存每个线程的JNIEnv*
,然后确定我们在哪个线程上(在本机函数中)使用正确的缓存JNIEnv*
?
您不能缓存JNIEnv,应该在缓存的JVM*上使用AttachCurrentThread()。如果本机线程已经附加,我相信这个函数相当于NOOP。
if ((*jvm)->AttachCurrentThread(jvm, (void **)(&env), NULL) == JNI_OK) {
....
}
相关文章:
- 枚举环境变量的惯用C++14/C++17方法
- 通过JNI传递数据数组的最快方法是什么
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 创建一个包含 c++ 默认值的环境文件
- 定义C++新的环境变量并在 bat 文件中使用它
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 将 C# DLL 导入 C++ 以用于 JNI
- 用于在并发环境中访问 MMIO 的软件模式
- 用C++包装 Java 库 (JNI)
- docker 构建失败:无法设置环境变量
- 如何通过 JNI 将 C 字符串表情符号传递给 Java
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- 如何使用C JNI环境运行Springboot应用程序
- std::strtoull在我的JNI NDK环境下无法识别
- 静态 c++ 对象中的 JNI 环境指针并调用连续两次使用字符串参数的 Java 函数会使 JVM 崩溃
- JNI 中的 Java 线程C++仅使用一个内核的环境.Arm 处理器和 Ubuntu
- C++程序JNI环境中的内存泄漏
- JNI环境指针
- 如何释放JNI环境指针
- 在多线程应用程序中缓存JNI环境