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

读取大图片总是报内存溢出~~~有谁知道?BufferedImage image = javax.imageio.ImageIO.read(file);
File   file   =   new   File(imgPath);   //imgPath是图片的存放路径

BufferedImage   image   =   javax.imageio.ImageIO.read(file);

报错:

java.lang.OutOfMemoryError:   Java   heap   space


图片大小是3425px*4843px,我本机内存1g。

除了扩内存,还有别的方法么?

------解决方案--------------------
Xms Xmx 把jvm的heap 调大点 试试~~~
------解决方案--------------------
设置一下stack size的大小 java 后跟参数即可设置,具体参数如下:
-Xms size set initial Java heap size
-Xmx size set maximum Java heap size
-Xss size set java thread stack size

------解决方案--------------------
用java.exe -Xmx1024m -Xms256m ....来运行的程序,你机器是1G但是又没分配给jvm

------解决方案--------------------
ImageIO.read(File file)使用来自boolean getUseCache() 和 File getCacheDirectory()的当前缓存设置控制所创建的 ImageInputStream 中的缓存。其中getUseCache()默认设定是true,getCacheDirectory()返回的是setCacheDirectory(File cacheDirectory)所设定的目标,如果用户没有明显设定,那么getCacheDirectory()返回的将是null。
所以,你出现问题的原因可能是没有设定getUseCache(),那么取true;没有设定setCacheDirectory()那么返回null,,也就是你要图片存在用户缓存区但没给它设定,所以出现了内存不足的情况~~

你不妨ImageIO.setCacheDirectory(File cacheDirectory)给它设定一个缓存路径试一试~~~
或者ImageIO.setUseCache(false)用系统缓存~~~~