2012-06-19 56 views
1

所以我的问题是关于JNI中的内存泄漏。将函数结果作为参数传递给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

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

但是,为了完整的正确性,在将它用作别处的参数之前,应检查FindClass的返回值。如果JVM引发异常,它仍然可以返回NULL。

相关问题