我正在使用 Java Spring 和 Hibernate 构建一个网站,并使用 Tomcat 7 作为服务器。 我有一个该站点的页面,一旦用户单击图像,就会加载其他两个图像。工作流程如下:
点击图片 -> 计算(spring 方法) -> 图片以 jpg 格式保存在服务器上 -> 从服务器更新图片并显示给客户端。
图像加载如下:
response.setContentType("image/jpg");
OutputStream out = response.getOutputStream();
FileInputStream in = new FileInputStream(xzCrossUrl);
int size = in.available();
byte[] content = new byte[size];
in.read(content);
out.write(content);
in.close();
out.close();
我知道这可能不是最好的方法,但我还没有太多经验。
在本地它工作正常,但是当我将.war 放在tomcat 目录并连接到服务器时,出现Java outOfMemory 堆空间问题,并且图像加载比本地慢得多。
我试图增加 tomcat 使用的内存,但它似乎不起作用;也许我做错了什么。
你能帮我解决这个问题吗?
非常感谢您!
最佳答案
我不能把它放在评论中,因为我没有足够的信誉,所以...
虽然这可能是您可以使用 Tomcat 配置修复的问题,但您拥有的代码不会针对任何图像进行缩放。您应该声明 byte[]
成为一个固定大小,然后读写,直到你用完所有文件字节:
// as a class scoped constant<br/>
private static final int BUFFERSIZE = 1024 << 8;
<pre><code>BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream(), BUFFERSIZE);
BufferedInputStream in = new BufferedInputStream(new FileInputStream(xzCrossUrl));
int bytesRead = 0;
byte[] content = new byte[BUFFERSIZE];
while((bytesRead = in.read(content) != -1){
out.write(content,0,bytesRead);
}
// Don't forget appropriate exception handling with a try/finally!
in.close();
out.close();
</code></pre>
仅供引用:我在这里写的,不是在 IDE 中,也没有编译它,所以如果不完美,我深表歉意。希望你明白了要点。
关于java - tomcat服务器上的outOfMemory java堆空间错误,没有出现在本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19590424/