【发布时间】:2012-04-10 19:46:11
【问题描述】:
我需要优化使用过多堆内存的应用程序。 使用 ByteArrayOutputStream 变量后,我在关闭该变量时遇到问题。我尝试过使用 close() 但它不起作用。这是代码:
ByteArrayOutputStream zipOutTempStream = new ByteArrayOutputStream();
//arquivo.getZipStream() has the XML received by FTP.
//STreamEtils is the function who transfers the XML to zipOutTempStream
StreamUtils.copiarStream(arquivo.getZipStream(), zipOutTempStream);
//Creating a new XML to write over this.
File arquivo1 = new File("C:/XML.xml");
if (arquivo1.exists()) {
System.out.println("ele existe");
} else {
if (arquivo1.createNewFile()) {
System.out.println("arquivo criado");
} else {
System.out.println("arquivo não criado");
}
}
FileOutputStream arquivo2 = new FileOutputStream(arquivo1);
//Copy the unziped XML to the new xml created.
StreamUtils.copiarStream(StreamUtils .uncompressXmlFromZipStream(new ByteArrayInputStream(zipOutTempStream.toByteArray())), arquivo2);
arquivo.setZipStream(null);
arquivo.setXmlStream(null)
return arquivo;
【问题讨论】:
-
怎么不行?你有错误吗?
-
A
ByteArrayOutputStream将数据写入字节数组。关闭ByteArrayOutputStream后,可以使用toByteArray方法访问字节数组。简单地关闭ByteArrayOutputStream不会使字节数组符合垃圾回收条件。 -
我可以工作,但问题是我有一个 80MB 的 XML,在我保存在 C: 之后,我想释放使用的堆内存。
-
这是垃圾收集器的工作。确保您没有对
ByteArrayOutputStream的额外引用。
标签: java memory stream heap-memory bytearrayoutputstream