bug-classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug awt/29420] OutOfMemory in image handling


From: hendrich at informatik dot uni-hamburg dot de
Subject: [Bug awt/29420] OutOfMemory in image handling
Date: 7 Nov 2006 13:35:02 -0000


------- Comment #18 from hendrich at informatik dot uni-hamburg dot de  
2006-11-07 13:35 -------
(In reply to comment #17)
> Created an attachment (id=12554)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=12554&action=view) [edit]
> suppress segfaults, throw java exceptions instead

OK. I applied your patch, and indeed I now get the following:

java.lang.OutOfMemoryError
   at gnu.java.awt.peer.gtk.GtkImage.getPixels(Native Method)
   at gnu.java.awt.peer.gtk.CairoSurface.<init>(CairoSurface.java:181)
   at
gnu.java.awt.peer.gtk.CairoSurface.getBufferedImage(CairoSurface.java:261)
   at gnu.java.awt.peer.gtk.GtkToolkit.createImage(GtkToolkit.java:255)
   at java.awt.Toolkit.createImage(Toolkit.java:661)
   at niffler.ImageUtils.loadImageViaToolkit(ImageUtils.java:253)
   at niffler.ImageUtils.loadImageViaToolkit(ImageUtils.java:211)
   at niffler.Niffler.loadImage(Niffler.java:1623)
   at niffler.Niffler.skipTinyImages(Niffler.java:2106)
   at niffler.Niffler.doShowNextImageButAvoidThumbnails(Niffler.java:2042)
   at niffler.SlideshowManager.run(SlideshowManager.java:82)

or:

java.lang.OutOfMemoryError
   at gnu.java.awt.peer.gtk.CairoSurface.nativeGetPixels(Native Method)
   at gnu.java.awt.peer.gtk.CairoSurface.getPixels(CairoSurface.java:134)
   at
gnu.java.awt.peer.gtk.BufferedImageGraphics.updateBufferedImage(BufferedImageGraphics.java:191)
   at
gnu.java.awt.peer.gtk.BufferedImageGraphics.drawImage(BufferedImageGraphics.java:317)
   at
gnu.java.awt.peer.gtk.CairoGraphics2D.drawImage(CairoGraphics2D.java:1445)
   at niffler.ImageUtils.getBufferedImageRGB(ImageUtils.java:397)
   at niffler.ImageUtils.getBufferedImage(ImageUtils.java:371)
   at niffler.Niffler.loadImage(Niffler.java:1630)
   at niffler.Niffler.skipTinyImages(Niffler.java:2108)
   at niffler.Niffler.doShowNextImageButAvoidThumbnails(Niffler.java:2044)
   at niffler.SlideshowManager.run(SlideshowManager.java:82)

To track this down, I tried torturing the tree (selecting nodes and
repainting) without loading images. This test didn't seem to leak
any memory (top showing jamvm going up to about 60M, and then staying
there).


I then changed Niffler to don't update the tree anymore during a slideshow:
just uncomment updateSelectedTreePath() in updateGUI(). As far as I can see,
this means that the JTree is neither modified nor repainted during a slideshow,
but I get the above OOME after ~400 medium-sized images (~1024x768)
at -Xmx300m and after ~170 images at -Xmx150m. In other words, about 230 
images per 150m of memory, or almost 1M per image. The images themselves
are about 100..200 KB each.

Running the slideshow on 3000x2000 JPGs with -Xmx300m dies with OOME
after ~220 images. 

It would be interesting to simply select "Edit -> Load via ImageIO" in
Niffler, to test for leaks in Toolkit.createImage( byte[] ) vs ImageIO.
Unfortunately this is so incredibly slow as to be impractical
(at least on my system).


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29420





reply via email to

[Prev in Thread] Current Thread [Next in Thread]