将函数结果作为参数传递到JNI中吗?

时间:2012-06-19 08:56:53

标签: java memory-management java-native-interface

所以我的问题是关于JNI中的内存泄漏。

如果我有:

jclass cls = env->FindClass("java/lang/String");
jobjectArray aRow = env->NewObjectArray(col, cls, NULL);
env->DeleteLocalRef(cls);

我知道cls内存会被释放。但是,如果我使用:

jobjectArray aRow = env->NewObjectArray(col, env->FindClass("java/lang/String"), NULL);

是否会释放作为参数传递的jclass?

1 个答案:

答案 0 :(得分:1)

是,但不是立即,只有在您当前的JNI方法返回到JVM调用方之后。然后GC会照顾它。只要您创建适量的引用,这应该不是问题。 JVM将告诉您何时您的金额不再适度。

但是,为了完全正确,您应该在将其用作其他地方的参数之前检查FindClass的返回值。如果JVM抛出异常,它仍然可以返回NULL。