实现JNI监听器

时间:2010-03-08 09:15:05

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

我在c ++“监听器类”(或多或少)中有以下代码,它调用Java对象的某些功能。我怀疑有内存泄漏:

JNIEnv *env = NULL;
vm_->AttachCurrentThread(&env, NULL);
const jclass cls = env->FindClass(...);
const jmethodID meth = env->GetMethodID(...);
const jobject obj = env->NewObject(cls, meth, ...);

[ more code ]

env->DeleteLocalRef(obj);

我的问题是:我是否还应该发布 cls meth 的本地参考? JNI文档对此并不十分清楚。

1 个答案:

答案 0 :(得分:2)

不,没有必要这样做。没有为这两个变量分配堆,它们只是当前方法的本地,不必是免费的或其他东西。

根据经验,您必须删除使用名称中包含New的方法创建的JNI对象,例如

env->NewStringUTF(...)
env->NewObjectArray(...)
env->NewObject(...)

因为这些方法都转换为堆上的某种内存分配(newmalloc