Pointer myVar = new Memory(Pointer.SIZE);
this.Lib.LoadData(myVar);
this.someVar = myVar.getPointer(0).getString(0);
私は私はそれを理解して、メモリリークを抱えている、getPointerは(0)ポインタを作成する必要がありますfinalize()で解放されるべきオブジェクトですが、そうでないようです。
何か不足していますか?これは仕様によるようです...そして、私は上記の関数をC++のリークなしで動かすことができます。
私はリークをテストするためにループ内のJavaコードを呼び出し、私は一時停止を入れてみましたが、手動でGCを呼び出すこともできました。また、この方法でギガバイトに膨らんでしまいます。
私は数日前から頭を打ちましたが、メモリを解放しようとするほど些細なことに巻き込まれてしまいました。私が言うことができる限り、私はその住所を持っていますが、私はそれをどうやって得るのか分かりません。
編集:ネヴァーマインドは、私もそれを延長せずにJNAから手動で自由に行うための方法があるとは思わない
...
これまでのところ動作しているようですが、データを解放するためにJNAには本当に他の方法はありませんか? : – StrangeWill
JNAは、ネイティブライブラリの単なるラッパーです。ネイティブメモリ、特に直接ネイティブバッファは管理しません。ネイティブライブラリデザイナーが、ライブラリが使用するメモリを割り当てる/割り当てを解除するためのインターフェイスを提供します。 – ecle
JNAにはメモリを解放するための内部メソッドですが、JNAですべて保護されているため、再度実装する必要があります。 – StrangeWill