下面的序列给我一个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中),当创建大量条目时wild OutOfMemory在某个时刻出现。我想让雅克布忘记我的对象。
您可以做的第一件事是停用未使用的仆人,*poa.deactivate_object()*。问题是知道何时可以停用仆人。
最好的想法是用一些超时策略来实现ServantManager。
不要忘记POA政策。
每当引用Corba对象时,它的内部引用计数都会增加一。这类似于Java垃圾收集器机制。
这意味着只有当ior
、href
和ref
被垃圾收集时,myObj
才会被垃圾收集。
还有一个选项可以手动减少myObj的Corba引用计数,但不建议这样做,因为这样会破坏Corba的引用计数机制,并导致不可预测的行为。