1

所以我的问题是关于 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会被释放吗?

4

1 回答 1

1

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

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

于 2012-06-19T09:16:45.710 回答