【问题标题】:Discard a servant from CORBA after calling "servant_to_reference"在调用“servant_to_reference”后从 CORBA 中丢弃一个仆人
【发布时间】:2012-02-14 14:28:16
【问题描述】:

下面的序列给了我一个 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 忘记我的 当我告诉它时对象。

【问题讨论】:

    标签: java corba jacorb


    【解决方案1】:

    您可以做的第一件事是停用未使用的仆人*poa.deactivate_object()*。问题是知道什么时候可以停用仆人。

    最好的想法是使用一些超时策略来实现ServantManager

    别忘了POA policies

    【讨论】:

    • poa.deactivate_object() 确实是我解决问题的方法(我没有时间发布解决方案)。感谢您提供额外的信息!
    【解决方案2】:

    每当您引用 Corba 对象时,它的内部引用计数都会增加一。这类似于 Java 垃圾收集器机制。

    这意味着只有当iorhrefref 被垃圾回收时,myObj 才会被垃圾回收。

    还有一个选项可以手动减少 myObj 的 Corba 引用计数,但不建议这样做,因为这样会破坏 Corba 的引用计数机制并导致不可预知的行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多