Java 转换大尺寸jpg图像时引发异常

Java 转换大尺寸jpg图像时引发异常,java,Java,我正在尝试上传jpg图像,并通过servlet将其转换为新的缩略图。 将该文件写入磁盘后,我的要求是为同一jpg文件创建缩略图。 为此,我使用了以下代码 //code to upload & write image file on disk goes here.. BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB); img.createGraphics().drawImage(Imag

我正在尝试上传jpg图像,并通过servlet将其转换为新的缩略图。 将该文件写入磁盘后,我的要求是为同一jpg文件创建缩略图。 为此,我使用了以下代码

//code to upload & write image file on disk goes here..

BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
img.createGraphics().drawImage(ImageIO.read(new File(sourceFile)).getScaledInstance(100, 100, Image.SCALE_SMOOTH),0,0,null);

ImageIO.write(img, "jpg", new File(thumbFile));
上述代码适用于小文件。但是当它的文件大小5MB时,它会复制,但无法将其转换为缩略图并抛出

Exception in thread ""http-bio-8888"-exec-63" java.lang.OutOfMemoryError: Java heap space
    at java.awt.image.DataBufferByte.<init>(Unknown Source)
    at java.awt.image.ComponentSampleModel.createDataBuffer(Unknown Source)
    at java.awt.image.Raster.createWritableRaster(Unknown Source)
    at javax.imageio.ImageTypeSpecifier.createBufferedImage(Unknown Source)
    at javax.imageio.ImageReader.getDestination(Unknown Source)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(Unknown Source)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(Unknown Source)
    at javax.imageio.ImageIO.read(Unknown Source)
    at javax.imageio.ImageIO.read(Unknown Source)
    at UploadFile.doPost(UploadFile.java:67).
线程“http-bio-8888”-exec-63”java.lang.OutOfMemoryError中的异常:java堆空间 位于java.awt.image.DataBufferByte。(未知源) 位于java.awt.image.ComponentSampleModel.createDataBuffer(未知源) 位于java.awt.image.Raster.createWritableRaster(未知源) 位于javax.imageio.ImageTypeSpecifier.CreateBuffereImage(未知源) 位于javax.imageio.ImageReader.getDestination(未知源) 在com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(未知源) 在com.sun.imageio.plugins.jpeg.JPEGImageReader.read(未知源)上 位于javax.imageio.imageio.read(未知源) 位于javax.imageio.imageio.read(未知源) 在UploadFile.doPost(UploadFile.java:67)。
请指导我。

您可以通过对java解释器使用“-Xms”和
-Xmx
命令行选项来增加堆大小(分别设置初始堆大小和最大堆大小)


请在上查看此博客。

您可以通过对java解释器使用“-Xms”和
-Xmx
命令行选项来增加堆大小(分别设置初始堆大小和最大堆大小)

查看此博客。

“但是当它使用图像压缩技术处理5MB大小的文件时”,一个“5MB文件”一旦扩展到实际图像,内存中的数据可能会达到10-150MB(或更高)。图像有多大(以像素为单位)?它是灰色的还是彩色的?它包括透明度吗?“但当它涉及到5MB大小的文件”和图像压缩技术时,一个“5MB文件”一旦扩展到实际图像,可能会占用内存中10-150MB(或更大)的数据。图像有多大(以像素为单位)?它是灰色的还是彩色的?它包括透明度吗?