2009-05-06 15 views
4

JavaプログラムからC++コードを呼び出す必要がある場合を考えてみましょう。 C++コードは何千ものオブジェクトを作成します。これらの動的オブジェクトはどこに保存されていますか?ネイティブコードはJVMと同じプロセスの一部になるため、JVMヒープで疑わしいです。JVMがネイティブコードを処理する方法

はいの場合は、JavaガベージコレクタスレッドのルールをC++コードのオブジェクトに適用しますか?

答えて

4

最初の質問では、C++はJVMとは関係のない独自のランタイムを使用してリソースを割り当てます.JVMはこのメモリアロケータのアクティビティを認識しません。

Javaガベージコレクタは、C++によって割り当てられたメモリをGCでGCしません。 Javaラッパーがメモリ解放を開始することを確認する必要があります。 javaによってオブジェクトがGCされる前に、ランタイムはfinalize()メソッドを呼び出します。デフォルトのものはjava.lang.Objectから継承され、基本的に何もしません。これをオーバーライドして、フックとして使用して、手動で管理されたメモリの割り当てを解除することができます。

+1

@Geek - はい。それはすべて同じプロセスの一部ですので、C++のクラッシュがJVMを取り除きます –

+1

はい、JVMと同じプロセスで実行され、プロセスをクラッシュさせる可能性があります。 – ConcernedOfTunbridgeWells

+0

ブライアンとCTWに感謝します。わかりません。どのようにしてOne Processを持つことができ、C++とJavaのメモリ割り当てが異なるのでしょうか。ヒープメモリはプロセスのアドレス空間の一部ではありません。スタック上のオブジェクトだけがアドレス空間の一部だと私は思う。コメントしてください。 – Geek