java - 读取 blob 字段时出现 "java.lang.OutOfMemoryError: Java heap space"

标签 java jsp tomcat

我有一个小网站,它从 mysql 数据库(BLOB 字段)获取图片,然后将它们打印在我的网页上。

在某些类中,我读取了 blob 字段,检查了图片尺寸,如有必要,我调整了它们的大小,并使用 servlet 在我的页面上打印了图片。

我在每一页都这样做(读取一些 blob 字段,检查大小,调整大小并打印几张图片)。

保存在数据库中的每张图片小于 200 kb。

我是这样读取 blob 字段的:

1)InputStream photo = record.getBinaryStream("blob_field_name");

2) BufferedImage sourceImage = ImageIO.read(photo);

3) 我调整图片大小

我经常在 tomcat 的日志 “线程“http-bio-12418-exec-26”java.lang.OutOfMemoryError:Java 堆空间”中出现异常

我在租用的服务器上有自己的虚拟机,并且有 64 MB 的堆空间。

如果我检查堆我有这个结果(对于具有相同图片的相同页面):

  • 堆放在我的笔记本电脑上 293404672
  • 服务器堆大小 503316480

我怎么知道我的代码是否有错误或者是服务器问题?

谢谢

最佳答案

不要将 blob 读入内存。整个想法是它们对于正常处理来说太大了。只需读取其输入流并将其写入输出即可。如果您需要有关 blob 大小的额外元数据,请将其存储在另一列中。

关于java - 读取 blob 字段时出现 "java.lang.OutOfMemoryError: Java heap space",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21551072/

相关文章:

java - 使用 for 循环创建三角形

java - 访问 Java 变量时 Eclipse JSP Javascript 表达式语言 EL 解析错误

javascript - 表格标签内的 HTML 标题标签的浏览器问题

来自 UncaughtExceptionHandler 的 Tomcat 7 OutOfMemoryError

Spring 的 Camel : Process finished with exit code 0

java - 如何模拟信息是否正确发送到另一台服务器?

java - 在 Eclipse java 调试器中隐藏不存在的变量

java - 无法在 pivotal tc server 3.2 中运行项目

javascript - 从 Angularjs 客户端在 POS 上打印

java - 如何显示弹出pdf文件而不是使用java内部保存?