2011-12-29 5 views
0

私は多くの計算を移植しています。私はJavaからC++を使用しています。そのようなことからパフォーマンスが大幅に向上しているのを見ていますが、もはや必要のない変数を取り除くためにjni関数を使用することはできません。たとえば、私はあなたのJNIメソッドがそれに来るときに終了することを知って、あなたがjfloatArrayを使用してきたあなたは、呼び出し:JNI-C++ jniを使用しているとき、jfloatのようなプリミティブをどのようにクリーンアップしますか

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

そして、それが配列を破壊し、メモリを解放します。可能であれば配列型ではない単一のプリミティブでも同じことができるようにしたいと思いますが、私はOracleとSunのドキュメントを見てきました。そのようなことをする方法はありません......私はちょうどC++を使ってオブジェクトを破壊するためのデフォルトの方法を使用するか、そのようなことを行うための安全な確実な方法があります。

答えて

2

何も必要ありません。 JNIインターフェイスがメモリまたはその他のリソースを割り当てている可能性がある場合にのみ、クリーンアップする必要があります。基本 タイプは、jfloatのように、基本的なC++タイプ(通常は float)のtypedefであり、コピーで渡されます。 jfloatを宣言すると、 はスタック上の単なる浮動小数点型であり、 のスコープから離れると消えます。クリーンアップしなければならないタイプは通常、ポインタ です。クリーンアップ機能は、ポインタが指しているメモリを解放するためにそこにあります。

+0

私はそれがやっていると確信していることを確認していただきありがとうございます:)私は、メモリ使用量が増えたことに気がつきませんでしたので、私のプロジェクトで道路がダウンしていればjfloatsやjdoublesのようなものを解放する必要があります。 –

関連する問題