所以我的问题是关于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?
答案 0 :(得分:1)
是,但不是立即,只有在您当前的JNI方法返回到JVM调用方之后。然后GC会照顾它。只要您创建适量的引用,这应该不是问题。 JVM将告诉您何时您的金额不再适度。
但是,为了完全正确,您应该在将其用作其他地方的参数之前检查FindClass
的返回值。如果JVM抛出异常,它仍然可以返回NULL。