2012-02-14 45 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的引用计数机制并导致不可预知的行为。