Du scheinst mir Variablen und Objekte durcheinander zu bringen.
sDoc ist nur die Variable, die im Laufe des Prozesses des Iterierens auf unterschiedliche Objekte referenziert.
Variablen und das Objekte sind 2 unterschiedliche Dinge.
Sie haben miteinander ungefähr so viel zu tun, wie der offizielle Referenzkurs des venezuelanischen Bolivars mit dem Dollar UND die reale agregierte Nachfrage der Wirtschaftssubjekte der Bolibananischen Republik Venezuela Bolivars in Dollars umzutauschen. Nämlich nix, nada, nothing, zilch.
Wenn du so einen code schreibst.
Integer a = new Integer(2);
Integer b = a;
hast du 2 Bezeichner, mit dem du auf das gleiche Objekt zugreifen kannst (a und b). 2 Bezeichner, 1 Objekt.
Wenn du so einen Code schreibst
Iterator it = list.iterator();
while (it.hasNext()) {
Integer a = (Integer)it.next();
}
verweist die lokale Variable a in ihrem Lebenszyklus auf unterschiedliche Objekte.
Variablen haben eine Bezeichner-Funktion. Über sie ist es möglich auf Objekte zuzugreifen.
Wenn du Dokumente aus einer DocumentCollection in eine Collection schreibst (benutze besser java.util.List statt java.util.Vector) dann macht recycle keinen Sinn. Schließlich willst du die Objekte in der Collection ja nochmal verwenden. Sonst wärs ziemlich sinnlos, sie erst überhaupt in die Collection zu tun.
recycle() rufst du nicht auf die Variablen auf. Sondern du referenzierst die Objekte mit der Variable und rufst dann recycle() auf das Objekt auf (wenn du es nicht mehr brauchst).
Dein Reflex recycle in einer Schleife aufzurufen, war schon richtig. Nur mußt du halt noch die Konzepte Variablen/Bezeichner und Objekte trennen.
Hoffe es hilft.
Übrigens macht es mit sehr hoher Wahrscheinlichkeit keinen Sinn Dokumente aus einer DocumentCollection in eine java Collection umzupacken. Die DocumentCollection ist ja schon eine Art Collection, über die du iterieren, etc. kannst. Aber das ist ein anderes Thema.
In der Praxis würds reichen im geeigneten Moment documentCollection.recycle() aufzurufen. Damit rufen die Notes Objekte selbst recycle auf alle darin referenzierten Notes-Dokument-Objekte auf. Oder noch besser: documentCollections werden mit einem DB-Objekt erzeugt. Du musst nur recycle auf das db-Objekt aufrufen. Dann wird recycle auf die daraus erzeugte DocumentCollection und die darin enthaltenden Notes-Dokumente automatisch aufgerufen.
Nur wenn du halt sehr viele Notes-Objekte aufrufst, macht es oft Sinn, jedes einzeln in der Schleife zu recyclen. Schreib beispielsweise oft den für das Programm interessanten Feldwerte eines Notes-Klasse in ein Java Bean (Java Objekt mit gettern und settern).
Hier ein praxisverwandtes Beispiel, in dem recycle in einer Schleife benutzt wird.
Document docMy = docCollection.getFirstDocument();
List bean = new ArrayList();
while (docCollection.hasNextDocument(docMy)) {
Document docLast = docMy;
MyBean mrBean = cDocBeanMapper.do(docMy); // erzeugt ein MyBean Objekt und schreibt die Werte aus dem Dokument in ein Java Bean.
bean.add(mrBean);
docMy = docCollection.getNextDocument(docMy);
docLast.recycle(); // das Objekt wird nie mehr benötigt, weil alle mich interessierenden Daten in dem Bean stehen.
}