【发布时间】:2020-07-20 11:25:18
【问题描述】:
根据官方文档说:
本地引用在本地方法调用期间有效,并在本地方法返回后自动释放
想象一个案例,我们有一个原生框架a.so
然后我们加载它。
static JavaVM * g_cachedJVM;
CJNIEXPORT jint JNICALL JNI_OnLoad(JavaVM * jvm, void * /*reserved*/) {
g_cachedJVM = jvm;
return JNI_VERSION_1_6;
}
我们通过a.so调用了一个native方法实现,我们在这个方法中启动了一个c++定时器。
CJNIEXPORT jobject JNICALL Java_A_Custom_Method(JNIEnv* jniEnv, jobject /*this*/) {
startTimerInCurrentTheadWithoutBlockCurrentThread(Seconds(1),[](){
//invoke method every 1 second
cppMethod();
});
}
void cppMethod() {
//Create some jni local reference use g_cachedJVM
// what is the life cycle of the local reference?
}
问题:cpp方法中本地引用的生命周期是什么
【问题讨论】:
-
startTimerInCurrentTheadWithoutBlockCurrentThread是什么? -
@Joni 在当前本地方法中每 1 秒调用一次方法调用线程而不阻塞线程
-
这个函数是你自己创建的吗?它是如何工作的?
标签: java c++ memory-management java-native-interface