我知道当我的 jni 方法结束并且我一直在使用 jfloatArray 时,我应该调用:
env->ReleaseFloatArrayElements(vec,in,0);
怎么样jfloat
,如何对不是数组类型的单个原语做同样的事情?
我知道当我的 jni 方法结束并且我一直在使用 jfloatArray 时,我应该调用:
env->ReleaseFloatArrayElements(vec,in,0);
怎么样jfloat
,如何对不是数组类型的单个原语做同样的事情?
JNI
您只需要在接口可能已分配内存或其他资源的情况下进行清理。基本类型,jfloat
像_ _ 当您声明 a 时,它只是堆栈上的浮点类型,并在您离开其范围时消失。jfloat
如果它是一个简单的jfloat(实际上是一个 typedefed'float),它将被堆栈删除,但如果它是一个 jfloat* 数组,在本机端使用new或malloc分配,则需要使用delete[]或自由的
简短的回答:你不必。既然你问你应该明白这一点......
最好说您必须仅在文档说您必须清理的地方进行清理。不幸的是,您必须推断或使用其他知识来判断。文档清楚地说明了哪些“发布”功能将与其他功能成对使用。事实证明,如果有释放功能,那么您必须使用它。此类释放函数也是唯一可以在异常未决时调用的函数。
您可以清理本地引用;如果不这样做,JNI 会在本机方法返回时自动清理它们。本地引用的数量是有限制的,因此如果在循环内部分配了本地引用,或者如果它们是由循环分配的,则应该在(不透明的)辅助函数中清理本地引用。