日期:2014-05-20  浏览次数:22366 次

BufferedImage 造成内存溢出
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
g2.fillRect(0, 0, image.getWidth(), image.getHeight());
if(carvingType==1){

DefaultSealFrame frame = new DefaultSealFrame(left, top, frameWidth * AbstractSeal.mm, frameHeight
* AbstractSeal.mm, frameLineWidth * AbstractSeal.mm, frameType);
SealChipNest chipNest=new SealChipNest(14*AbstractSeal.mm, frame);
chipNest.draw(g2);
}
else if (isPrintable()) {
seal.setPrintable(true);
seal.draw(g2);
// 镜像
final AffineTransform hFlip = new AffineTransform(-1.0, 0, 0, 1.0, width, 0);
g2.drawImage(image, hFlip, null);
} else {
seal.draw(g2);
}
// AbstractSeal abstractSeal=(AbstractSeal) seal;
// abstractSeal.saveDraw();
g2.dispose();
ImageIO.write(image, "jpeg", response.getOutputStream());
response.getOutputStream().flush();
 一次性显示很多图片的,在BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 这行报内存溢出了



------解决方案--------------------
显示一张大图片,和,显示多张图片的时候,BufferedImage 必然有内存溢出的风险。
因为,你所有压缩格式的图片,都被转换成像素点阵,存放到内存当中,这个是非常消耗资源的。
而且,BufferedImage 设计这个类的目的,主要是为了,显示小图标,一般都是64X64像素的图片,
楼主要是操作大的图片,要么,每次处理一张(不要过大),
要么,网上查查,还有没有其他JAR包支持的,拿来用用。