JNI-C ++如何在使用jni时清理像jfloat这样的原语

时间:2011-12-29 07:15:24

标签: c++ java-native-interface

我正在移植大量数学。我正在使用来自java的c ++并且看到了这样做的巨大性能提升但是我无法弄清楚要使用什么jni函数来摆脱我不再需要的变量。例如,我知道当你的jni方法结束并且你一直在使用jfloatArray时,你会打电话:

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

这会破坏阵列并释放内存。如果可能的话,我希望能够对不是数组类型的单个基元做同样的事情,但是我已经查看了oracle和sun文档,并且没有方法可以做这样的事情......应该我只是使用默认方式使用c ++来销毁对象,或者是否有一种安全可靠的方法来做这样的事情。

1 个答案:

答案 0 :(得分:2)

没有必要。你只需要清理的情况下 JNI接口可能已分配内存或其他资源。基本 类似于jfloat的类型是基本C ++类型的typedef(通常, float),并通过副本传递;当你申报jfloat时, 它只是堆栈上的浮点类型,并在你消失时消失 离开它的范围。您必须清理的类型通常是 指针;清理功能可以释放内存 指针指向。