BufferedImage 一次性显示图片的时候 造成内存溢出 牛人们帮我看看

xiasjf 2012-03-03 09:07:03
response.setContentType("image/jpeg");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
AbstractSeal.setMm(pxPerInch / 25.4);
int height = (int) (frameHeight * AbstractSeal.mm + left * 2);
int width = (int) (frameWidth * AbstractSeal.mm + top * 2);
Seal seal = generateSeal();

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);这行报内存溢出 请大家帮我看看.....
...全文
974 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-03-03
  • 打赏
  • 举报
回复
应该出现这样极端情况的概率偏低,毕竟只有输出的时候才会需要占住内存,输出完毕后就可以回收了。

不过你也可以选择将中间件进行集群,这样就会更宽松些,另外也预防单点故障。

另外,32bit环境下,内存最多可以配置到 1.5GB~1.75GB左右。
xiasjf 2012-03-03
  • 打赏
  • 举报
回复
三十个用户 同时刷新页面 显示图片 这样会不会 报内存溢出 现在担心的是这个问题 虽然 JVM内存设置过了
MiceRice 2012-03-03
  • 打赏
  • 举报
回复
不知道你图片多大,其实自己可以粗略估算下:

假设图片大小为 1024×768,采用真彩色,也就是4位色彩体系。

那么每张图片仅存储空间开销为 3MB。

30用户,每个用户6张图片,即180张。

3MB×180=540MB

也就是仅仅图片存储空间开销,就不低于540MB。
xiasjf 2012-03-03
  • 打赏
  • 举报
回复
现在想除了增加JVM内存 程序中是否可以完善 呵呵
healer_kx 2012-03-03
  • 打赏
  • 举报
回复
那叫泄露,Image确实很耗内存。没关系。。。Java嘛,啥不费内存呢?
xiasjf 2012-03-03
  • 打赏
  • 举报
回复
我现在增加了JVM内存 大概用户是30个人 一个页面做多显示六个图片 这样应该没问题了吧
MiceRice 2012-03-03
  • 打赏
  • 举报
回复
Image本来就是非常消耗内存的东西。。。

如果不能控制一次性处理图片的数量,就只能设法增加JVM内存: -Xmx1024m

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧