gpt4 book ai didi

java - 实现 JNI 监听器

转载 作者:行者123 更新时间:2023-11-30 09:56:19 25 4
gpt4 key购买 nike

我在 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);

我的问题是:我是否也应该释放 clsmeth 的本地引用? JNI 文档对此不是很清楚。

最佳答案

不,没有必要这样做。没有为这两个变量分配堆,它们只是当前方法的本地变量,不必被释放或什么的。

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

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

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

关于java - 实现 JNI 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2400256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com