2012-06-19 55 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。

相關問題