C++オブジェクトをラップしてJavaからアクセスできるようにしたいと思います。 jni and using c++ new'ed objects in javaを読んで、JavaラッパークラスのC++オブジェクトへの参照を保存する方法を理解しました。しかし、私が把握していないことの1つは、C++オブジェクトの作成と削除を処理する方法です。確かに、私は自分のC++オブジェクトを作成して削除するネイティブメソッドを導入することができますが、これはJavaでメモリ管理を自分自身で処理しなければならないことを意味します。 Javaラッパーオブジェクトが作成され、ガベージコレクトされたときに呼び出されるネイティブメソッドは実装する必要がありますか?JNI:ラップされたC++オブジェクトの作成/削除を処理する方法
4
A
答えて
7
C++オブジェクトを作成および破棄するネイティブメソッドを記述する必要があります。私はあなたがどのようにそれらをJavaで呼び出すことができるか知っている3つの異なる方法があります。
Javaオブジェクトに対して
public void finalize()
メソッドを実装します。ガベージコレクタは、オブジェクトがファイナライズされた後にこのメソッドを呼び出します。ここでdestroyメソッドを呼び出すと、ガベージコレクタがすべてを処理します。 finalize()には欠点があります。ガベージコレクタが遅くなり、いくつかの名前から別のスレッドに呼び出されます。dispose()メソッドを記述し、手でメモリを管理します。これはネイティブリソースに対してswing/AWTによって使用されます。これにより、いつどこでC++オブジェクトが削除されるかを制御できます。 finalize()を実装してメモリリークを止めたり、コードをデバッグすることは可能です。
PhantomReferenceクラスとReferenceQueueを使用して、オブジェクトの1つがガベージコレクトされているかどうかを確認し、そこからC++オブジェクトを削除します。これにより、finalize()の代替手段が提供されます。
関連する問題
- 1. プログラムで作成されたオブジェクトのイベントを処理する方法は?
- 2. アンドロイド作成されたbimapを削除する方法
- 3. Cで作成された動的テキストボックスを削除する方法#
- 4. DLLで作成されたオブジェクトを削除する
- 5. 削除処理のためにノードをロックする方法
- 6. Meteor:#eachでラップされたオブジェクトから生成されたイベントを処理しますか?
- 7. Solr DataImportHandlerで物理的に削除されたドキュメントを削除する方法
- 8. 削除されたプロジェクトをTFSソース管理から削除する方法
- 9. CoreData + iCloud +カスケード削除 - 処理方法は?
- 10. OrientDB:オブジェクトAPIで作成されたレコードと参照の削除
- 11. 1つのスクリプトで作成された出力フォルダを処理する方法
- 12. JNIでオブジェクトを作成する方法は?
- 13. C#レジストリキーを削除する方法の作成
- 14. iosカスタム作成された特定のUIViewを削除する方法
- 15. ランタイムとデスティネーションで作成されたサブコンポーネントとプロパティを処理する方法は?
- 16. 動的に作成されたコントロールでイベントを処理する方法は?
- 17. androidデータベースの削除を処理する方法は?
- 18. 分割されたステップ処理後のファイルの削除
- 19. asp.netで動的に作成されたコントロールを削除する方法
- 20. ダイナミックに作成されたDIVコントロールを動的に削除する方法
- 21. 使用後に作成されたカスタムページを削除する方法
- 22. 削除された表の行を処理するためのベストプラクティス?
- 23. C++でJava JNI KeyListenerを作成する方法
- 24. Google App Engine(Python)で削除を処理する方法
- 25. Spring MVCでRESTfulな削除を処理する方法
- 26. 削除されたC++オブジェクトを指すハンドルの無効化
- 27. C#の - オブジェクト合成 - ボイラープレートコードを削除
- 28. 反復処理からオブジェクトを削除するNSMutableArray
- 29. C++で削除不能なレジストリキー(またはファイル)を作成する方法
- 30. データ処理専用のセキュリティ保護されたmysqlサーバの作成方法