我提出了一个新问题,因为这与我上一个帖子不同。我现在知道哪个问题更准确了。
我创建一个新的bytearrayoutputstream
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();没有什么特别事情。然后,当我向它写入一个图像时,这样
ImageIO.write(image, "gif", byteArray);内存首先增加到100MB,不是在日食中,而是在“现实”中。然后,每次我向该流或另一个流写入新图像时,它就会慢慢增加!
过了一段时间,它停止工作,有点崩溃。
我试着关闭它,刷新,重置,所有的一切,但它仍然会泄漏内存。当我停止使用byteArray或将其设为空时,我希望它能从内存中消失。
System.gc();在这种情况下不会有帮助。
请帮助我,以及您需要知道的任何其他事情,我将回答,并请返回并回复:)
发布于 2012-08-15 01:58:33
你的使用模式应该是这样的:
while( keepRunning) {
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
ImageIO.write(image, "gif", byteArray);
}如果您这样做的速度超过了JVM收集垃圾的速度,那么您最终会得到一个非常长的GC暂停或OutOfMemory异常。
发布于 2012-08-15 02:09:12
你有没有试过这个:
try{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
baos.flush();
byte[] imageBytes = baos.toByteArray();
baos.close();
}catch(Exception ex){
System.out.println(ex.getMessage());
}发布于 2012-10-26 23:43:38
你的所作所为没有任何意义。您将图像从内存中取出,并再次将其放入内存中,这次是以字节数组的形式。
您应该将该图像放入文件中或通过网络发送。或者,如果您只想保存一份副本,请复制图像(而不是字节数组!)就像我在这里描述的:Bug in using Object.clone()
https://stackoverflow.com/questions/11957981
复制相似问题