【发布时间】:2017-01-20 21:05:42
【问题描述】:
我有大数据输入 xml 文件,我正在使用 stax 解析器对其进行解析,然后我将一组特定的标签值存储到 txt 文件中。我有 4 个案例要检查,但每次在第 2 次之后检查它在
处给出的内存不足错误for (String conversa: p_convers) {
converInfo += conversa + "-----";
}
在这一行,许多用户将添加大量段落文本,然后我会将其存储到文件中。
为了避免这一阶段的内存问题,我在 Eclipse 中添加了 VM var 参数,如下所示在运行配置中
-Xms1024m
-Xmx1024m
-XX:MaxPermSize=256m
使用此设置,它将成功运行并显示警告消息
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
如何避免这些事情并使用稳定的代码?
【问题讨论】:
-
使用 StringBuilder - 内存效率更高。
-
关于警告。在 java 8 中,Permgen 被 metaspace 取代。Metaspace 能够自动增加它的大小(与 permgen 不同),但是如果你需要限制它的大小,你可以使用
-XX:MaxMetaspaceSize。 -
你能不能每次都在循环内的文件中添加字符串,而不是构建一个巨大的字符串然后把它全部放在一个文件中?另外,每个对话中大约有多少个字符?
-
如果 StringBuilder 那么我不能使用的许多字符串函数就像我将使用 if(converInfo.endsWith("=====")){ converInfo = converInfo.substring(0, converInfo.长度()-5); } 这些事情对 stringbuilder 来说很困难。最后它是我的本地机器.. 如果我在 linux 服务器上执行相同的 vm 参数和 32gb RAM,这是否可以解决或者它可能随时崩溃?
标签: java memory out-of-memory