- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我应该在 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/
我有一个在位图上做一些工作的 native 方法。在方法内部,我通过方法调用获取图像数据,该方法调用将数据写入我使用 NewIntArray 创建的 jintArray 参数: jintArray p
我应该在 GetIntArrayElements 之后调用 ReleaseIntArrayElements 吗? JNIEXPORT void JNICALL Java_com_test_Exampl
我是一名优秀的程序员,十分优秀!