3

我制作了一个 Domino ViewEntries 对象向量(它们可以是文档或任何 Domino 对象)。这不是 ViewEntryCollection 也不是 DocumentCollection。列表对象是一个 Vector(它甚至可以是一个 ArrayList)。我知道这个关于回收特定对象的技术说明,但是处理列表中的对象并不清楚

我需要单独回收 Vector 中的所有元素吗?或者我可以简单地删除它们吗?如果我想回收元素向量,我该怎么做?是否可以使用向量,或者应该使用不同类型的列表构造来完成?

这个例子让我相信它实际上不会回收它们......讨论。

Vector entries = new Vector();
..... add each ViewEntry to the collection....
for (int i=0;i<entries.size();i++) {
     ((ViewEntry) entries.elementAt(i)).recycle();
}
4

2 回答 2

3

容器中的 Domino 对象仍然是 Domino 对象,因此您必须recycle在每个元素上调用以回收其内存。

您包含的代码完成了这个任务,没有办法用更少的recycle()调用来完成这个任务。

于 2012-05-30T05:09:08.813 回答
1

recycle() 方法将删除所选 Java 对象的后端对象。请注意,它还会删除可能同时引用完全相同的 JNI 引用的任何其他 Java 对象的后端对象。

它还将回收通过该类创建的任何对象。例如,如果您回收 NotesCollection,它应该回收通过 NotesCollection 引用的所有文档。或者更明显的是,回收 Session 对象将回收一切。

在循环中回收的原因是出于内存目的。如果您将文档存储在向量中,请小心,因为您将每个完整的物理文档都保存在内存中。最好存储 UNID 并根据需要拉入文档。或者,如果引用视图,则拉取 ViewEntry 而不是文档。因为它将使用更少的内存。

Bobs Balaban 的博客文章对此进行了详细的介绍。

http://www.bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-5-taking-out-the-garbage-java

http://www.bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-6-now-it-gets-complicated-java-garbage-collection-notes-and-threads

http://www.bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-7-garbage-threads-and-the-corba-classes-in-notes

于 2012-05-30T07:26:22.567 回答