丢失之后回收多米诺骨牌对象

adm*_*nfd 2 java lotus-domino xpages

在阅读了我已经知道的许多博客和帖子之后,我必须在我的课程和方法结束之前回收多米诺骨牌对象,以免重载我的堆.但是魔鬼在细节上,我多次忘记回收一些物体,以便它们在堆上仍然活着.

所以我的问题是,是否可以从堆中收集和回收它们,而无需重新启动服务器?

Pau*_*ers 14

几点:

  1. 回收Domino对象与重载堆无关.回收是因为Java与底层C++ Domino对象之间的句柄映射.Java变量通过正常的垃圾收集进行回收,因此无论您是否回收,Java堆都不受影响.剩下的是C++对象的句柄,并且只有很多池.这就是为什么你得到的错误不是关于Java内存的错误,而是像"PANIC:LookupHandle:处理超出范围"之类的错误.
  2. 指向同一底层对象的多个Java变量重用相同的句柄.这就是为什么如果你回收一个(句柄到一个)Domino对象但仍然在其他地方使用那个Domino对象你会遇到问题的原因.
  3. 在每个XPages请求(页面加载,部分刷新等)结束时,会话,SessionAsSigner等被回收.回收过程也回收所有后代.因此,除非任何XPage卡在无限循环中,否则您仍然无法在任何地方使用任何对象.
  4. 如上所述,回收对象会回收所有后代.但是DateTimes和Names之类的对象是Session的子节点,而不是ViewEntry.关于已经解决的问题以及如何解决的问题有各种各样的帖子.

这就是为什么没有理由关注循环,除了在循环中,重要的是不仅要回收被迭代的对象,还要回收在该循环中创建的任何DateTimes或Names.