私たちはC++でポインタの概念を持っています。今度は、C++でメモリを割り当てて、オブジェクト参照(JNIを使用)としてJavaに渡すと、誰がそれを解放し、誰が解放するのですか。JNI、ガベージコレクションとポインタ - Java/C++には何をすべきか?
1.)ガベージコレクタは自動的にJavaで動作しますか?
2.)ラップされたJNIクラスのファイナライズメソッドのポインタを明示的に削除する必要がありますか?
3)それとも我々だけでファイナライザが信頼することができないよう(確定)と、オブジェクト
4)を削除または割り当て解除するにはいくつかの方法があるC++コードを呼び出すためにJavaの責任であることを忘れなければなりませんメモリ自体を直接Java自体で(どのようにJava intreprets C + +ポインタinorderそれを削除するために)?
(JavaからC++にオブジェクトを渡すとき)これとその逆の場合のベストプラクティスは何ですか?
+1明らかに、アロケータは解放するものでなければならず、Java側(可能であれば)を「クリーナー」に割り当てる必要があります。 – Viruzzo
JavaがC++を呼び出す場合、私はそのクリーナーに同意します。 –
ポイント番号2の場合、Javaのリリースメソッドは実際にオブジェクトを削除するC++メソッドを呼び出しますか?どのようにJavaはC++で割り当てられたメモリを直接解放できますか? – seahorse