【发布时间】:2016-05-02 03:24:57
【问题描述】:
我是 JNI 的新手,所以这个幼稚问题的答案可能很简单。
手头的问题是我正在将 JNI 绑定到某个 C 库以完成繁重的工作。
在进行实际计算之前,C 库需要先从共享内存加载一个辅助数据结构(并返回一个指向“大”结构的指针),或者如果结构不是,则通过提供的路径从磁盘加载在共享内存中可用。
辅助结构将用作const。
为了避免每次都从磁盘加载,我正在考虑创建一个 static int 来表示大结构已正确初始化:
static int big_struct_loaded_in_mem = 0;
void Java_className_dowork(/*parameters*/){
if(!big_struct_loaded_in_mem){
// load struct
big_struct_loaded_in_mem = 1;
}
// load from shared mem then do work using big_struct
load_from_shm();
}
void Java_className_cleanup(/*parameters*/){
//free up mem
big_struct_loaded_in_mem = 0;
}
为简单起见,假设 Java 调用者和本机函数是单线程的。
非常感谢!
注意:当然,没有static int 的简单修复可能只是每次调用load_from_shm() 并测试返回的指针,但我很好奇这个特别的想法是否不好:即在 JNI 绑定中创建一个静态全局变量。
【问题讨论】:
标签: java c performance static java-native-interface