Domino 9 und frühere Versionen > ND8: Entwicklung
JavaAgent OutOfMemoryError
(1/1)
atbits:
Ich habe aktuell ein Problem bei einem auf dem Notes Client laufenden JavaAgent der mir zu einem in ein Richtextfeld hochgeladenes Bild resized.
Bei größeren Bildern so ab 5MB bekomme ich eine OutOfMemoryError Exception.
Jetzt kenne ich natürlich den notes.ini Parameter
JavaMaxHeapSize=number of bytes
http://www.lntoolbox.com/en/notesini-reference/bycategory/serverconfiguration/14-Server_Configuration/1148-javamaxheapsize.html
Der zieht aber nur auf dem Client
Dann habe ich noch was hier gefunden
http://www-01.ibm.com/support/docview.wss?uid=swg21410374
und dann diesen notes.ini Parameter versucht
JavaDebugString=-XX:MaxPermSize=256m
bringt leider auch nix.
Hat jemand eine Idee, wie ich lokalen Java-Agents mehr Speicher geben kann.
Auf dem 7er Client gehen übrigens einige Bilder, die auf dem 8.5 nicht mehr klappen, vermutlich hat der 8.5er Client schon einiges des JavaHeaps selber verbraten :-(
Grüße David
P.S.: Ach ja, der Agent selbst macht natürlich ordenlich recycle() auf alle NotesObjekte ;-)
atbits:
Auch mein Versuch mit einem etwas abgewandelten notes.ini Parameter
--- Code: ---JavaDebugString=-XX:MaxPermSize=256M -Xmx256M
--- Ende Code ---
hat leider nicht funktioniert :'(
atbits:
Ha - ich habe es doch mit einem Code-Rewrite fixen können.
Ursprünglich war das Ding für den 6.5er Client und aka JDK 1.3.x
Das muss ich jetzt aber nicht mehr unterstützen (ab Notes 7 und damit JDK 1.4)
Somit kann ich ImageIO.read() verwenden, was scheinbar sparsamer mit dem Speicher umgeht als meine Methode ;-)
--- Code: ---/**
* Liest eine Bidldatei ein ung gibt diese als BufferedImage zurück
*
* Ab JDK 1.4 kann auch ImageIO.read() verwendet werden, das gibts in JDK
* 1.3 aber nicht.
*
* @param filename
* dateiname der zu lesendnen datei
* @return bufferedImage
*/
public static BufferedImage readBufferedImage(
final String filename) {
// Get Image
// 1.3 Stuff
/*
ImageIcon icon = new ImageIcon(filename);
java.awt.Image image = icon.getImage();
// Create empty BufferedImage, sized to Image
BufferedImage buffImage = new BufferedImage(image.getWidth(null), image
.getHeight(null), BufferedImage.TYPE_INT_RGB);
*/
BufferedImage buffImage = null;
try {
buffImage = ImageIO.read(new File(filename));
} catch(Exception e) {
e.printStackTrace();
}
// Draw Image into BufferedImage
/*
Graphics g = buffImage.getGraphics();
g.drawImage(image, 0, 0, null);
*/
return buffImage;
}
--- Ende Code ---
Grüße David
flaite:
Bist du sicher, dass JavaMaxHeapSpace nicht für den Client funktioniert? Ich dachte, dass schon.
Helfen zum Problemfinden können auch JavaVerbose und JavaVerboseGC Einträge.
http://www.ibm.com/developerworks/lotus/library/ls-Java_variables/index.html
atbits:
--- Zitat von: Pitiyankee am 17.06.10 - 16:06:12 ---Bist du sicher, dass JavaMaxHeapSpace nicht für den Client funktioniert? Ich dachte, dass schon.
Helfen zum Problemfinden können auch JavaVerbose und JavaVerboseGC Einträge.
http://www.ibm.com/developerworks/lotus/library/ls-Java_variables/index.html
--- Ende Zitat ---
... ziemlich sicher - ich hab es versucht und laut Doku und IBM (siehe u.a. Links oben) ist das nur für den Server
JavaVerbose und JavaVerboseGC sind doch eher was fürs Debugging oder?
Damit ich sehe wo und wann der Speicher freigegeben wird???
Grüße David
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln