【问题标题】:java.lang.OutOfMemoryError: Java heap space when i tried to create a BufferedImagejava.lang.OutOfMemoryError:我尝试创建 BufferedImage 时的 Java 堆空间
【发布时间】:2014-10-25 13:54:47
【问题描述】:

我在尝试创建 BufferedImage 时遇到问题。我只是在租用的服务器上遇到这个问题,而不是在我的开发环境(我的电脑)上。

我有一个表格来上传图片。上传图像后,我将其保存到文件系统。 我立即保存它,因为根据你们中的一些人所说,我可以从服务器内存中“释放”资源,因为我使用文件系统上的图像而不是对象 Part 来调整图像大小、控制等. 我需要。

当我尝试从大于 2-3 mb 的图像创建 BufferedImage 时,我会收到该错误。

在执行此行时,我的应用程序停止工作并出现该错误

BufferedImage immagineTemporaneaBufferizzata = ImageIO.read(new File...);

我使用了一种在互联网上找到的方法来检查服务器上的内存。这是我在遇到错误之前得到的:

已用内存:26 可用内存:30 总内存:57 最大内存:57

我应该增加堆内存吗?我尝试在 catalina.bat 和 catalina.sh 上都这样做,但我的Max Memory 没有看到变化。可能我做错了什么。在linux上增加堆大小的正确方法是什么?

【问题讨论】:

标签: java tomcat servlets jvm heap-memory


【解决方案1】:

最大内存 57 MB 对于处理 2-3 MB 图像的 Java 应用程序来说是非常低的。是的,如果可以的话,你绝对应该增加内存。

澄清一下:图片大小为 2-3 MB。这个 2-3 MB 是多少?压缩图像的大小?如果它是 2-3 MB 的 JPG,那可能是一张大图(取决于质量)。例如。它甚至可能是 3200x2000 像素的图像,即 640 万像素,使用 3 字节 RGB 像素模型,它将是 ~20 MB 内存中的二进制数据。

关于增加tomcat内存请看这些问题:

Dealing with "java.lang.OutOfMemoryError: PermGen space" error

Increase Tomcat memory settings

【讨论】:

  • 感谢您的解释。我不熟悉图像调整大小,我不知道调整图像大小时会发生什么。我检查了我正在上传的图像。它是 4896x1890;这意味着,根据您所说,我的网站正在处理一个 27 mb 的二进制流。现在我想知道像 facebook 这样的大型网站如何能够同时处理数千张图片的上传。
猜你喜欢
  • 2019-11-28
  • 2021-09-09
  • 2011-10-24
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
相关资源
最近更新 更多