2012-02-14 16 views
1

以下順序給我一個IOR,並保持MyObj中實例 地方CORBA(JacORB)內部,使得IOR可以在以後階段使用:捨棄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」(當然在後期)嗎?在一些Hastable(JacORB內部)中引用永遠保存爲 ,並且在創建大量條目時,會在某個點出現 WildOffMemory。當我告訴它時,我想讓JacORB忘掉我的 對象。

回答

1

您可以做的第一件事是停用未使用的僕人,* poa.deactivate_object() *。問題是知道什麼時候servant可以被停用。

最好的理念是實施ServantManager與一些超時政策。

不要忘了POA policies

+0

poa.deactivate_object()確實爲我解決了這個問題(我沒有時間發佈解決方案)。感謝您的額外信息! – AndrewBourgeois 2012-02-17 14:28:29

0

每當您引用Corba對象時,它的內部引用計數就會增加1。這與Java垃圾收集器機制類似。

這意味着只有當ior,hrefref被垃圾收集時,myObj纔會被垃圾收集。

還有一個選項可以手動降低myObj的Corba引用計數,但不建議這樣做,因爲那樣會打敗Corba的引用計數機制並導致不可預知的行爲。