在使用java将大量数据写入文件时,如何避免 java堆内存空间错误发生?这会导致程序出现故障..
此致
magggi
答案 0 :(得分:2)
您的问题是您使用单个StringBuffer来处理所有内容。您应该尝试更频繁地刷新数据。你将获得表现和记忆。
如果没有原始代码,我无法帮助您,但请不时尝试冲洗缓冲区。
在您的情况下不建议
如果您仍想使用StringBuffer并仅刷新一次,那么您必须使用-Xmx***M
命令上的java
选项增加堆空间。
资源:
关于同一主题:
答案 1 :(得分:1)
从您的评论中听起来,您正在迭代填充StringBuffer的一些对象,并且一旦完成迭代,您将整个StringBuffer刷新到文件。您可以在每次迭代时直接写入输出流(推荐),也可以在每次迭代时写入StringBuffer,将其刷新到输出流,然后清除StringBuffer以进行下一次迭代(不是首选) )。这应该会降低你的内存使用量。
我不建议增加堆大小 - 这听起来不是解决此问题的正确方法。
答案 2 :(得分:0)
启动java程序时使用-Xmx参数来设置最大堆大小:
java -Xmx256M com.foo.MyClass
答案 3 :(得分:0)
启动时是否尝试将内存参数传递给应用程序?
例如,以下内容将最大内存设置为1 GB
java -Xms512m -Xmx1024m myClass
答案 4 :(得分:0)
几个选项
使用-Xmx JVM参数增加Java堆大小。在-Xmx之后,写下程序成功运行所需的兆字节数。
使用流媒体。计算文件中的下N个字节,然后使用FileOutputStream编写它们,在计算下一个N字节之前将它们丢弃。需要更多代码才能知道这对您的程序是否以及如何运作。
编辑: 根据您的说法,听起来您可以将FileOutputStream包装在BufferedOutputStream中,完全删除StringBuffer并直接写入BufferedOutputStream。