我知道当我的jni方法结束并且我一直在使用jfloatArray时,我应该调用:
env->ReleaseFloatArrayElements(vec,in,0);
jfloat
怎么样,如何对不是数组类型的单个基元做同样的事情?
答案 0 :(得分:3)
只有在JNI
接口可能已分配内存或其他资源的情况下,您才需要进行清理。基本类型,如jfloat
,是基本C ++ * 类型 *(通常是浮动)的typedef,并由副本传递;当你声明一个jfloat
时,它只是堆栈上的一个浮点类型,当你离开它的范围时就会消失。
答案 1 :(得分:1)
如果它是一个简单的 jfloat (实际上是一个typedefed'flora),它将被堆栈删除,但如果它是一个jfloat *数组,在本机端分配新或 malloc 需要使用删除[] 或免费
进行清理答案 2 :(得分:1)
简短的回答:你不必。既然你问你应该明白这个......
很高兴地说,必须只在docs说您需要清理的地方进行清理。不幸的是,你必须推断或使用其他知识来讲述。文档清楚地说明哪些“发布”功能与其他功能成对使用。事实证明,如果有一个发布功能,那么你必须使用它。此类发布函数也是唯一的functions that can be called while an exception is pending。
你可以清理本地参考资料;如果不这样做,JNI会在本机方法返回时自动清除它们。本地引用的数量是有限的,因此如果它们在其中分配,则应该清理循环内的本地引用,如果它们是由它分配的,则在(不透明的)辅助函数中。