Hi,
die JVM verfügt über einen eigenen s.g. garbage-collector, der sich um die Zerstörung von nicht mehr benötigten Speicherbereichen, Objekten, Variablen etc. kümmert. Dieser gc kann jedoch nur die jave-Core klassen sauber bedienen und nicht die von Lotus gelieferten Klassen und Interfaces. Deshalb muß der jeweilie Programmierer das Aufräumen des Speichers erledien, sprich, selbst implementieren. Das funktioniert mit der Methode recycle(), die auf die entsprechenden Objekte anzuwenden ist.
Ein einfacher Versuch hierzu ist es, einen Agenten zu schreiben, der in einer TestDB in einer Schleife dokumente erzeugt (z.B. 30000).
//Your Code goes here
Database db=agentContext.getCurrentDatabase();
Document doc;
for(int i;i<30000;i++){
doc=db.creteDocument();
doc.replaceItemValue("Form","TEST");
doc.replaceItemValue("FirstName",i);
doc.save();
}
In dieser Form wird ein Client vermutlich etwa 10000 Dokumente schaffen, bevor es zu einer Exception kommt, auf dem Server dürfte das etwas länger dauern.
Abhilfe bringt hier nach dem doc.save() der Aufruf der Methode recycle():
....
doc.save();
doc.recycle();
Das spart nicht nur Speicher (erheblich), sondern bringt zusätzlich performance, da die jvm sich nicht mehr um die Verwaltung der Vielzahl von doc-Objekten kümmern muß. Der Agent läuft anschließend etwa 3X so schnell wie vorher!!!!!