ssk*_*ssk 7 java java-native-interface android
我正在从JNI方法返回一个jstring.我在返回值之前删除了对它的本地引用.
JNIEXPORT jstring JNICALL TestJNIMethod( JNIEnv* env, jclass )
{
jstring test_string = env->NewStringUTF( "test_string_value" );
env->DeleteLocalRef( test_string );
return test_string;
}
Run Code Online (Sandbox Code Playgroud)
调用JAVA方法是否仍然能够访问返回的jstring或垃圾收集器是否会清理内存?
Eoi*_*oin 18
不,它不会,但是您的代码将在早于ICS的Android版本上运行.从ICS上这段代码将正确失败.
通常,您不需要自己删除本地引用,一旦JNI函数返回到Java,引用将获得GC.
该规则的例外是如果你创建了很多它们,也许是在一个循环中.然后可以填充本地参考表.请参阅IBM:JNI对象引用概述.
您应该阅读ICS中的JNI本地参考更改.即使您不是为Android编写,它仍然会识别许多常见错误.
| 归档时间: |
|
| 查看次数: |
10428 次 |
| 最近记录: |