1

次のシーケンスはIORを提供し、MyObjインスタンスをCORBA(JacORB)内のどこかに保持して、IORを後の段階で使用できるようにします。

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」を破棄するように指示できますか(もちろん、後の段階で)?参照は一部のHastable(JacORB内)に永久に保持され、多数のエントリを作成すると、ある時点でワイルドなOutOfMemoryが表示されます。JacORBに指示したときに、自分のオブジェクトを忘れてもらいたい。

4

2 に答える 2

1

最初にできることは、未使用の使用人* poa.deactivate_object() *を非アクティブ化することです。問題は、使用人をいつ非アクティブ化できるかを知っていることです。

最良のアイデアは、タイムアウトポリシーを使用してServantManagerを実装することです。

POAポリシーを忘れないでください。

于 2012-02-17T13:28:21.940 に答える
0

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

つまり、myObjがガベージコレクションされるのは、である場合のみiorhrefあり、ガベージコレクションされるということrefです。

myObjのCorba参照カウントを手動で減らすオプションもありますが、Corbaの参照カウントメカニズムが無効になり、予期しない動作が発生するため、これはお勧めしません。

于 2017-04-02T13:25:41.433 に答える