首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

读取大图片总是报内存溢出~有哪位高手知道?BufferedImage image = javax.imageio.ImageIO.read(file)

2011-12-15 
读取大图片总是报内存溢出~~~有谁知道?BufferedImage image javax.imageio.ImageIO.read(file)Filefile

读取大图片总是报内存溢出~~~有谁知道?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)用系统缓存~~~~

热点排行
Bad Request.