我有一个小网站,它从 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/