3

私はDominoViewEntriesであるオブジェクトのベクトルを作成しました(それらはDocumentsまたはそれに関しては任意のDominoオブジェクトである可能性があります)。これはViewEntryCollectionでもDocumentCollectionでもありません。リストオブジェクトはVectorです(ArrayListの場合もあります)。特定のオブジェクトのリサイクルに関するこのテクニカルノートを知っていますが、リストにあるオブジェクトの処理は明確ではありません

ベクター内のすべての要素を個別にリサイクルする必要がありますか?または、単にそれらを削除できますか?要素のベクトルをリサイクルしたい場合、これをどのように行いますか?ベクトルで可能ですか、それとも別のタイプのリスト構成でこれを行う必要がありますか?

この例は、実際にはそれらをリサイクルしないと私に信じさせます...話し合います。

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-take-out-the-garbage-java

http://www.bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-6-now-it-gets-complicited-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 に答える