I'm using ImageIO.read(InputStream is) in loop for making BufferedImages from Remote Server (HttpConnection and InputStream)
but, It happens out of memory java heap space everytime.
I don't know why this happens.
This is my jvm parameter option.
-verbosegc -XX:+PrintGCDetails -Xmx1024m - XX:PermSize=128m
and full gc logs.
[Full GC [PSYoungGen: 506K->0K(6656K)] [PSOldGen: 963K->1457K(5504K)] 1469K-
>1457K(12160K) [PSPermGen: 8556K->8556K(131072K)], 0.0155080 secs]
[Full GC [PSYoungGen: 480K->0K(11072K)] [PSOldGen: 5001K->4697K(11456K)]
5481K->4697K(22528K) [PSPermGen: 18222K->18222K(131072K)], 0.0350780
5481K->secs]
as you see there are free space in younggen and oldgen, permgen. That is a last full gc log.
After logging, jvm shutdown with out of memory.
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.awt.color.ICC_Profile.getData(ICC_Profile.java:1315)
at java.awt.color.ICC_Profile.getInstance(ICC_Profile.java:762)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.setImageData(JPEGImageReader.java:610)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImageHeader(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readNativeHeader(JPEGImageReader.java:561)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.checkTablesOnly(JPEGImageReader.java:316)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.gotoImage(JPEGImageReader.java:438)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readHeader(JPEGImageReader.java:554)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:940)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:924)
at javax.imageio.ImageIO.read(ImageIO.java:1400)
at javax.imageio.ImageIO.read(ImageIO.java:1322)
Please help. Thanks.
I'm sorry for my question.
I have posted my source. It extract hashcode from images.
1.main codes.
HashExtractor h = new HashExtractor();
while(rs.next()) {
Inputstream is = getStream();
h.doSomething(is);
//something to do using bi.
is.close();
}
//in HashExtractor
public String doSomething(InputStream is) {
BufferedImage bi = ImageIO.read(is);
String hash = "";
//extract hash.
return hash;
}
I have removed some details to looks easy. (getting connection.. etc)
Thanks!