2012-02-14 8 views
1

を呼び出した後、以下のシーケンスは、私にIORを与え、IORは、後の段階で使用することができるようにどこかでCORBA(のJacORB)内部のこのmyobjインスタンス を保持します。CORBAからサーバントを破棄し、「servant_to_reference」

MyObj myObj = new MyObj(); 
org.omg.CORBA.Object ref = poa.servant_to_reference(myObj); 
org.omg.CORBA.Object href = MyObjHelper.narrow(ref); 
String ior = orb.object_to_string(href); 

私は何とかJacORBに "myObj"を捨てるように伝えることができますか?参照は永久に保持されます(JacORBの中にある)一部のHastableでは永久に保持され、多くのエントリを作成すると、ある時点で という野生のOutOfMemoryが表示されます。私はJacoorBに私の言うときに私の オブジェクトを忘れて欲しいです。

答えて

1

まず、未使用の従業員* poa.deactivate_object() *を無効にすることができます。この問題は、サーバントが非アクティブにできるタイミングを知ることです。

ベストイデアは、ServantManagerにタイムアウトポリシーを実装しています。

POA policiesを忘れないでください。

+0

poa.deactivate_object()は本当に私が問題を解決するのに役立った(私は解決策を投稿する時間がなかった)。余分な情報をありがとう! – AndrewBourgeois

0

Corbaオブジェクトを参照するたびに、内部参照カウントが1増加します。これは、Javaのガベージコレクタメカニズムに似ています。

これは、ior,hrefおよびrefがガベージコレクションされた場合にのみ、myObjがガベージコレクションされることを意味します。

myObjのCorba参照カウントを手動で減らすオプションもありますが、これは推奨されません。これは、Corbaの参照カウントメカニズムを無効にし、予測できない動作を引き起こすためです。

関連する問題