NutzCN Logo
问答 大图片内存溢出
发布于 3347天前 作者 javanan 3945 次浏览 复制 上一个帖子 下一个帖子
标签: image
	private BufferedImage readImage(TempFile tf) {
		//用系统缓存
		ImageIO.setUseCache(false);
		this.image= org.nutz.img.Images.read(tf.getFile());
		return image;
	}
       this.image= org.nutz.img.Images.read(tf.getFile());
       当图片 大于 2M左右的时候  内存溢出
          java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferByte.<init>(DataBufferByte.java:92)
at java.awt.image.ComponentSampleModel.createDataBuffer(ComponentSampleModel.java:415)
at java.awt.image.Raster.createWritableRaster(Raster.java:941)
at javax.imageio.ImageTypeSpecifier.createBufferedImage(ImageTypeSpecifier.java:1073)
at javax.imageio.ImageReader.getDestination(ImageReader.java:2896)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1066)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1034)
at javax.imageio.ImageIO.read(ImageIO.java:1448)
at javax.imageio.ImageIO.read(ImageIO.java:1308)
at org.nutz.img.Images.read(Images.java:503)
at com.xy.businessmg.service.FileService.readImage(FileService.java:89)
at com.xy.businessmg.service.FileService.run(FileService.java:74)
at com.xy.businessmg.service.FileService.save(FileService.java:163)
at com.xy.businessmg.module.barber.WorkModule.uploadWorkImage(WorkModule.java:193)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.nutz.mvc.impl.processor.MethodInvokeProcessor.process(MethodInvokeProcessor.java:23)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.AdaptorProcessor.process(AdaptorProcessor.java:33)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.ActionFiltersProcessor.process(ActionFiltersProcessor.java:40)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.ModuleProcessor.process(ModuleProcessor.java:113)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.EncodingProcessor.process(EncodingProcessor.java:27)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor.process(UpdateRequestAttributesProcessor.java:15)
at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
at com.xy.businessmg.mvc.LogTimeProcessor.process(LogTimeProcessor.java:28)
at org.nutz.mvc.impl.NutActionChain.doChain(NutActionChain.java:40)
14 回复

用 1.7 的jdk试一下

这跟文件大小没啥关系,跟图片像数有关系

同一个图,你用ImageIO直接读一样是这个错误

那么我 需要去压缩像素? @wendal

有没有 其他好的办法?
微信 这样的app 是怎么处理这些图片呢?

直接走ImageIO,可以指定解码大小,谷歌一下就有

直接弄云存储就好了哈哈

google 不出去 能给个小demo吗 @wendal

把图片上传到短点,然后贴链接吧
或者其他能发文件链接的方式

是我的 上传图片的 代码吗?@wendal

把图片拖到"短点"的输入框, 就会开始上传,然后生成一个短链接 @javanan 是的,就是你,哈哈 短点

我测试了这个图片

BufferedImage image = Images.read(new File("W:\\big.jpg"));
System.out.println(image.getWidth());
System.out.println(image.getHeight());

环境 win7 x64, jdk8 x64 , 输出

2448
3264

就是说很正常呢, 看来你得试试新版jdk了

ok 谢谢,我现在用了jdk7, jdk8不会存在内存溢出错误吗?

我的遇到内存溢出错误后加了//用系统缓存

ImageIO.setUseCache(false);
就不再报了,只是昨天 上传作品的时候 又报了,,服务是重启不久的。

    有什么 工具可以测试性能吗?能评估出我的服务器上的应用能支持多少人使用。
    现在服务器是2G 内存  1核 50带宽,,,估计会300人使用,这个我怎么去评估呢?

原来是这种情况下报,那就的确是内存不足了,而且99%是其他代码导致消耗内存过多。用profiler工具查内存吧

不清楚业务的情况下没法估算服务器压力的

loadrunner之类的可以测试

添加回复
请先登陆
回到顶部