0

我知道当我的 jni 方法结束并且我一直在使用 jfloatArray 时,我应该调用:

env->ReleaseFloatArrayElements(vec,in,0);

怎么样jfloat,如何对不是数组类型的单个原语做同样的事情?

4

3 回答 3

3

JNI您只需要在接口可能已分配内存或其他资源的情况下进行清理。基本类型,jfloat像_ _ 当您声明 a 时,它只是堆栈上的浮点类型,并在您离开其范围时消失。jfloat

于 2013-07-11T12:05:06.710 回答
1

如果它是一个简单的jfloat(实际上是一个 typedefed'float),它将被堆栈删除,但如果它是一个 jfloat* 数组,在本机端使用newmalloc分配,则需要使用delete[]自由的

于 2013-07-11T12:17:48.007 回答
1

简短的回答:你不必。既然你问你应该明白这一点......

最好说您必须仅在文档说您必须清理的地方进行清理。不幸的是,您必须推断或使用其他知识来判断。文档清楚地说明了哪些“发布”功能将与其他功能成对使用。事实证明,如果有释放功能,那么您必须使用它。此类释放函数也是唯一可以在异常未决时调用的函数

可以清理本地引用;如果不这样做,JNI 会在本机方法返回时自动清理它们。本地引用的数量是有限制的,因此如果在循环内部分配了本地引用,或者如果它们是由循环分配的,则应该在(不透明的)辅助函数中清理本地引用

于 2013-07-11T15:18:01.957 回答