你可以回收Domino对象的向量吗?

时间:2012-05-30 04:49:18

标签: java lotus-domino recycle

我创建了一个Domino ViewEntries对象的向量(它们可以是Documents或任何Domino对象)。这不是ViewEntryCollection,也不是DocumentCollection。列表对象是Vector(它甚至可以是ArrayList)。我知道有关回收特定对象的technote,但处理列表中的对象并不清楚

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

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

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

2 个答案:

答案 0 :(得分:3)

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

您所包含的代码可以完成此任务,并且无法通过较少的recycle()来电来完成此任务。

答案 1 :(得分: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