gpt4 book ai didi

java - 我应该在 GetIntArrayElements 之后调用 ReleaseIntArrayElements 吗?

转载 作者:行者123 更新时间:2023-12-02 09:49:14 24 4
gpt4 key购买 nike

我应该在 GetIntArrayElements 之后调用 ReleaseIntArrayElements 吗?

JNIEXPORT void JNICALL Java_com_test_Example_func
(JNIEnv *env, jobject jobj, jintArray javaArray) {
jint *array = env->GetIntArrayElements(javaArray, JNI_FALSE);

// do something with array

// is it necessarily to call ReleaseIntArrayElements in the end?
//env->ReleaseIntArrayElements(javaArray, array, JNI_ABORT);
}

如果我不调用ReleaseIntArrayElements,似乎没有内存泄漏

最佳答案

是的,你应该这样做。 GetIntArrayElements 可能已创建数据的副本,或固定数组以避免垃圾收集器移动数据。在您调用 ReleaseIntArrayElements 之前,该操作不会撤消。

<小时/>

此外,如果您认为 GetIntArrayElements(javaArray, JNI_FALSE) 不会创建副本,那么它是不正确的。
GetIntArrayElements 的第二个参数是 jboolean*,而不是 jboolean。它是一个输出参数,函数返回后将指向一个值,指示是否进行了复制。
在您的情况下,JNI_FALSE恰好与NULL具有相同的值,因此您实际上是在执行GetIntArrayElements(javaArray, NULL) -也就是说,“我对知道是否制作了副本不感兴趣”。

关于java - 我应该在 GetIntArrayElements 之后调用 ReleaseIntArrayElements 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56439313/

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