使用jni时如何清理jfloat

时间:2013-07-11 12:03:24

标签: c++ java-native-interface

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

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

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

3 个答案:

答案 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会在本机方法返回时自动清除它们。本地引用的数量是有限的,因此如果它们在其中分配,则应该清理循环内的本地引用,如果它们是由它分配的,则在(不透明的)辅助函数中。