【发布时间】:2015-03-07 05:48:48
【问题描述】:
我有一个程序,它可以编写大量 SQL 语句,然后将其压缩到一个文件中。但是,有时用户可以选择大量项目来生成 SQL 语句。例如,SQL zip 文件可能包含 4 个文件,每个文件长度为 1+ 百万个字符。
目前SQL生成依赖于函数:
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
但是,这会导致内存使用量激增,并导致程序因“java.lang.OutOfMemoryError: Java heap space”错误而崩溃。我尝试增加堆大小,但程序仍然很慢,并且偶尔会崩溃.
有没有办法减少上述方法的内存消耗?它必须是作为字符串输出的整个对象(不仅仅是它的名称)。下面是应用程序启动的图表,空闲了一会儿,然后在崩溃前尝试运行。
这是使用内存的内容:
【问题讨论】:
-
一些信息,让您有根据的猜测。你能提供你的文件编写代码吗?
-
您应该在这里改变您的方法,我认为如果您使用 File 对象来存储该 sql 的结果将解决您的问题,也最好从 File 对象编写 zip。
-
因为
ToStringBuilder只接受StringBuffer而不是输出流,它似乎需要您将整个对象字符串保存在内存中,直到写入文件。您可能会研究一种不同的方法,该方法允许您在解析 pojo 时转储字符串。
标签: java string memory tostring apache-commons