我正在尝试使用以下代码读取10MB的Jpeg图像,但是我得到了“线程中的异常”主“java.lang.OutOfMemoryError:Java堆空间”。我想知道10MB的图像是否太大而无法读取,如果是这样我应该增加堆空间。
增加堆空间应该是最后一种选择,所以我想知道是否还有其他方法可以实现这一点。我的代码附在下面;
BufferedImage image;
try {
image = ImageIO.read(new File("C:/Users/Administrator/Desktop/aa.jpg"));
printDetails(image);
} catch (IOException e) {
}
帮助表示赞赏。
答案 0 :(得分:4)
请注意,10MB JPEG可以轻松解压缩到更多兆字节的未压缩图像数据。
假设您使用的是标准的24位色彩空间(每个色彩位为8位),图像的尺寸为10000 x 10000像素(考虑到10 MB输入大小,这不太不现实),那么您需要更多超过286MB的存储空间来存储原始的未压缩图像数据(假设开销为零)。
这远远大于Oracle客户端VM的默认最大堆大小,因此您可能需要使用the -Xmx
argument来增加可用堆内存。