我有大数据输入xml文件,我使用stax解析器解析,然后我将一组特定的标记值存储到txt文件。我有4个案例需要检查,但每次检查后都会在
中检查出内存错误for (String conversa: p_convers) {
converInfo += conversa + "-----";
}
在这一行,许多用户将添加一大段段落文本,然后我将其存储到文件中。
为了避免这段内存问题,我在Eclipse中添加了VM var参数,如下面的Run configuration
-Xms1024m
-Xmx1024m
-XX:MaxPermSize=256m
使用此设置,它将成功运行并显示警告消息
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
如何避免这些事情并使用稳定的代码?
答案 0 :(得分:1)
最多java-8命令MaxPermSize
已被删除并由
-XmxNNNm
即(你已经做过)
-Xmx1024m
为了避免此警告,请将其删除。
如果继续出现内存错误,请为服务器添加更多内存。
现在,您的代码:
for (String conversa: p_convers) {
converInfo += conversa + "-----";
}
永远不要在循环中使用字符串连接,这就是StringBuilder诞生的原因:
private final String SEPARATOR = "-----";
....
StringBuilder converInfo = new StringBuilder();
for (String conversa: p_convers) {
converInfo.append(conversa);
converInfo.append(SEPARATOR);
}
答案 1 :(得分:1)
使用StringBuilder
/ StringBuffer
来连接字符串。如果您使用+
,那么每次创建新的字符串实例时,例如从循环开始,你创建了三个字符串(比如conversa
你得到了' conversa' value):
conversa
conversa-----
converterInfoconversa-----
答案 2 :(得分:0)
正如其他人已经回答的那样,首先用StringBuilder替换字符串连接。如果没有帮助,请更改算法。
"At this line a huge set of paragraph text will be added by many users and then I will store it to file. "
不要创建一个大缓冲区,而是在读取文件后尝试将较小的块写入文件。