JavaプログラムからC++コードを呼び出さなければならない場合を考えてみましょう。C ++コードは、何千ものオブジェクトを作成します。これらの動的オブジェクトはどこに保存されますか?ネイティブコードはJVMと同じプロセスの一部になるため、JVMヒープにあると思われます。
はいの場合、JavaガベージコレクタースレッドのルールはC ++コードのオブジェクトに適用されますか?
最初の質問では、C++ は、JVM とは関係のない独自のランタイムを使用してリソースを割り当てます。JVM は、このメモリ アロケータ内のアクティビティを認識しません。
2 番目の質問については、Java ガベージ コレクターは、C++ によって割り当てられたメモリを GC しません。Java ラッパーがメモリ解放を開始することを確認する必要があります。オブジェクトが Java によって GC される前に、ランタイムはfinalize()
メソッドを呼び出します。デフォルトのものは java.lang.Object から継承され、基本的に何もしません。これをオーバーライドして、手動で管理されたメモリの割り当て解除を開始するためのフックとして使用できます。