GCC K-Nuggets; Huth, Carsten; Erdmann, Ingo; Hahnl, Olaf: Recycling von Notes-Java-Objekten und Durchführung der Java Garbage Collection, Groupware Competence Center, Paderborn 2003.

THEMES: GCC K-Nuggets\Software Devel... | Huth, Carsten\K-Nuggets | Erdmann, Ingo\K-Nuggets | Hahnl, Olaf\K-Nuggets
YEAR: 2003
Login Login
User: Anonymous


LABEL: Java
ORGANIZATIONS: GCC - Groupware Competence Center
THINGS: GroupProcess | Java | Notes | Programmierung
 

Notes-Java-Objekte müssen in Java-Anwendungen (z. B. Applets, Applications, Agents) recycled werden, da es ansonsten offenbar der vom Applet verbrauchte Speicher nicht wieder richtig freigegeben werden kann. Dadurch verknappen sich die Speicherressourcen und es kann je nach Applet-Größe und Art und Anzahl der geöffneten Objekte zu Abstürzen kommen, insbesondere bei mehrmaligem Starten von Applets.
Dies ist zwar grundsätzlich in der Notes Hilfe (z. B. hier: ) beschrieben, wird aber leider in den Java-Codebeispielen in der Notes Hilfe nicht durchgeführt. Bei kleineren Applets erreicht man scheinbar auch nicht die entsprechenden Ressourcengrenzen des Speichers, daher scheint es dann unproblematisch zu sein, wenn Objekte nicht recycled werden. Der Grund liegt darin, dass die Java Klassen Wrapper Klassen um die C-API sind, und die lokalen Notes DLLs aufrufen. Die C-Objekte können nicht durch die Java Garbage Collection aufgeräumt werden. Darum muss jedes Notes Objekt durch die Methode recycle() gelöscht werden, wenn es nicht mehr gebraucht wird. Praktische Beispiele sind unten angefügt.

Um den verbrauchten Speicher am Ende eines Java-Applets wieder freizugeben schien es eine interessante Idee zu sein, beim Beenden des Applets (NotesAppletStop) eine explizite Gargabe collection (System.gc()) durchzuführen. Dies hat sich aber beim GroupProcess-Modeler als nicht empfehlenswert erwiesen, da hierduch zusätzliche Abstürze des Applets hervorgerufen wurden (Fehlermeldung "current Thread not owner"). Siehe Codebeispiel unten.


Codebeispiele für das Recycling (aus dem GroupProcess-Modeler, Projektübersicht siehe Database 'GCC K-Pool', View 'Themes (All)', Document 'GroupProcess: Groupware based Ad hoc Workflow Management - Project Homepage'):
  • Recycling von Sessions
    Recycling ist hier am wichtigsten, da eine Session als "größtes" Objekt auch die darin enthaltenen Objekte, vom Typ View und Document enthält und diese beim Recycling der umgebenden Session auch mit recycled werden sollten. mainframe ist im Beispiel ein Objekt vom Typ MainFrame. MainFrame ist eine von AppletBase abgeleitete Klasse, die die Session enthält ("class MainFrame extends AppletBase"), daher wird die Methode openSession() vererbt und kann hier genutzt werden.

  • Recycling von Embedded Objects. Methode, die z. B. in Ingo Erdmanns HyperbolicModeler und Carsten Huths GroupProcess-Modeler verwendet wird (Das explizite Recyclen von Embedded Objects hat nach ersten Tests beim GroupProcess-Modeler die Stabilität weiter erhöht):
  • Recycling von Dokumenten (Typ Document) und Views (Typ View)

Codebeispiel für die Garbage Collection (gc):
  • Garbage Collection in NotesAppletStop: