Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino
Speicherverwaltung Java + Lotus Notes Domino
Snowaddy:
Seid Notes 4.x habe ich schon ein Problem mit Java Applets in Notes Dokumenten.
Im Web funktioniert alles wunderbar (SUN JVM etc.)
Im Notes Client jedoch summiert sich der Speicherverbrauch des Notes-Tasks mit jedem Öffnen des Dokumentes, das das Applet enthält.
Das Applet ist ca. 300KB groß, lädt relativ viel nach und erzeugt auch sehr viele Objekte..
-> Einmal Öffnen kann schon mal 5MB verbrauchen.
Diese werden aber nach dem Schließen nicht wieder zur Verfügung gestellt.
Gegen Ende der Fahnenstange (JavaMaxHeapSize erreicht) wird Notes dann langsam und bleibt schließlich hängen.
Man kann natürlich in der notes.ini JavaMaxHeapSize hoch setzen. Aber das kann doch nicht die Lösung sein...
Außerdem habe ich den Eindruck, dass das Ablegen der Applet-Klassen lokal auf dem Rechner und setzten des Pfades (JavaUserClasses) in der notes.ini etwas hilft...
Woran kann das liegen ?
Wie gesagt: Mit SUN JVM funktioniert alles ohne Probleme.
Gruß, Dirk.
Ralf_M_Petter:
Verwendet das Applet das Notes API?
Grüße
Ralf
Snowaddy:
Ja, schon..
Die werden aber alle recycled. Bei der Session bin ich mir nicht ganz sicher...
Ralf_M_Petter:
Ohne den Code jetzt zu sehen, werden wir da auf keinen grünen Zweck kommen. Versuche einen Testcase zu gernerieren, der so einfach wie möglich ist, bei dem das Problem jedoch noch auftritt. Dann poste den Source dazu dann schau ich mal kurz rein.
Grüße
Ralf
P.S. Bei Applets muß man wie bei allen Gui Sachen extrem auf das Threading aufpassen. Vor allem auf die NotesThread.sinit und term Problematik.
Snowaddy:
Hier einige Code-Schnipsel für das Laden der Daten :
// Session holen
try {
session = openSession();
} catch (NotesException e) {
e.printStackTrace();
}
// DB usw. öffnen
try {
Database db = session.getDatabase(model.dbServer, model.dbPath);
Document document = null;
if (model.doc != null)
document = db.getDocumentByID(model.doc);
else
document = db.getDocumentByUNID(model.docUNID);
// Daten laden
ladeDaten (db.getParent(), document);
} catch (Exception e) {
e.printStackTrace();
}
public void ladeDaten(Object session, Object doc) {
Database db = ((Document)doc).getParentDatabase();
View view = db.getView(name);
//....
//(Kein NotesThread.sinit() oder sterm().....)
//........
if (view != null)
view.recycle();
if (db != null)
db.recycle();
//..........
// Kein session.recycle
}
Kann das fehlende session.recycle denn die Ursache sein ? Es werden ca. 100 kb Daten geladen. Aus denen werden dann viele Objekte erzeugt, die nichts mit der Notes-API zu tun haben. Der Speicherverbrauch deutet eher darauf hin, dass diese Objekte nicht wieder aufgeräumt werden.
Wo muss ich mit dem Threading aufpassen ?
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln