-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Description
What steps will reproduce the problem?
1. Repeatedly generate thumbnails using code like:
Thumbnails.of(file).size(getWidth(),getHeight()).asBufferedImage();
What is the expected output? What do you see instead?
If you watch the heap it grows very quickly, by several to tens of megabytes
each time a thumbnail is generated.
What version of the product are you using? On what operating system? Which
version of Java (Sun/Oracle? OpenJDK?) ?
Netbeans 7.3 on OS X.
Please provide any additional information below.
Here is a simple program (testimage.jpg is a 2 MB image)
public static void main(String[] args) {
File theFile = new File("testimage.jpg");
BufferedImage currentThumbnail = null;
for (int i = 0; i < 25; i++) {
System.out.println(i+"\tCurrent Heap Size in MB: " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024 * 1024));
try {
currentThumbnail = Thumbnails.of(theFile).size(200, 200).asBufferedImage();
// currentThumbnail =
Thumbnailator.createThumbnail(theFile,200,200);
} catch (Exception e) {
System.out.println("Could not create thumbnail: " + e.toString());
}
}
}
Below I show the output of the two calls to the library. Thumbnails.of()
continues to grow the heap and I run out of 512 MB heap after about 20
iterations. Thumbnailator.createThumbnail heap grows to about 125 MB max and
then sits stable there. I feel like that's a pretty huge heap as well, but at
least it settles down.
The Internet seems to suggest (various stackoverflow posts I have read) that
the bufferedimages are probably being kept in a collection somewhere in the
latter case and the references are never cleared so the images don't get
garbage collected. Since the Thumbnails.of approach is the one that handles
EXIF rotation (my whole reason for using the library), this is dealbreaker for
me right now. Thought you should know.
Thumbnails.of output
-----------------------------------
0 Current Heap Size in MB: 1
1 Current Heap Size in MB: 55
2 Current Heap Size in MB: 76
3 Current Heap Size in MB: 122
4 Current Heap Size in MB: 152
5 Current Heap Size in MB: 142
6 Current Heap Size in MB: 194
7 Current Heap Size in MB: 230
8 Current Heap Size in MB: 240
9 Current Heap Size in MB: 240
10 Current Heap Size in MB: 286
11 Current Heap Size in MB: 286
12 Current Heap Size in MB: 332
13 Current Heap Size in MB: 378
14 Current Heap Size in MB: 355
15 Current Heap Size in MB: 400
16 Current Heap Size in MB: 400
17 Current Heap Size in MB: 423
18 Current Heap Size in MB: 446
19 Current Heap Size in MB: 458
20 Current Heap Size in MB: 481
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:59)
at java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:397)
at java.awt.image.Raster.createWritableRaster(Raster.java:938)
at javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1056)
at javax.imageio.ImageReader.getDestination(ImageReader.java:2879)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1046)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1014)
at javax.imageio.ImageReader.read(ImageReader.java:923)
at net.coobird.thumbnailator.tasks.io.FileImageSource.read(Unknown Source)
at net.coobird.thumbnailator.tasks.SourceSinkThumbnailTask.read(Unknown Source)
at net.coobird.thumbnailator.Thumbnailator.createThumbnail(Unknown Source)
at net.coobird.thumbnailator.Thumbnails$Builder.asBufferedImage(Unknown Source)
at thumbtest.ThumbTest.main(ThumbTest.java:29)
Thumbnailator.createThumbnail output
-----------------------------------
0 Current Heap Size in MB: 1
1 Current Heap Size in MB: 63
2 Current Heap Size in MB: 61
3 Current Heap Size in MB: 121
4 Current Heap Size in MB: 136
5 Current Heap Size in MB: 120
6 Current Heap Size in MB: 133
7 Current Heap Size in MB: 117
8 Current Heap Size in MB: 124
9 Current Heap Size in MB: 113
10 Current Heap Size in MB: 120
11 Current Heap Size in MB: 110
12 Current Heap Size in MB: 117
13 Current Heap Size in MB: 124
14 Current Heap Size in MB: 113
15 Current Heap Size in MB: 120
16 Current Heap Size in MB: 110
17 Current Heap Size in MB: 116
18 Current Heap Size in MB: 123
19 Current Heap Size in MB: 113
20 Current Heap Size in MB: 120
21 Current Heap Size in MB: 110
22 Current Heap Size in MB: 116
23 Current Heap Size in MB: 123
24 Current Heap Size in MB: 113
Original issue reported on code.google.com by br...@fireplan.ca
on 19 May 2013 at 6:26