Java堆内存容量

时间:2010-09-09 18:48:41

标签: java memory

在使用java将大量数据写入文件时,如何避免 java堆内存空间错误发生?这会导致程序出现故障..

此致

magggi

5 个答案:

答案 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)

几个选项

  1. 使用-Xmx JVM参数增加Java堆大小。在-Xmx之后,写下程序成功运行所需的兆字节数。

  2. 使用流媒体。计算文件中的下N个字节,然后使用FileOutputStream编写它们,在计算下一个N字节之前将它们丢弃。需要更多代码才能知道这对您的程序是否以及如何运作。

  3. 编辑: 根据您的说法,听起来您可以将FileOutputStream包装在BufferedOutputStream中,完全删除StringBuffer并直接写入BufferedOutputStream。