[英]how to avoid outofMemory error due to String variable
我有大數據輸入xml文件,正在使用stax解析器進行解析,然后將一組特定標記值存儲到txt文件中。 我有4種情況要檢查,但是在第二次之后每次都要檢查它在以下位置的內存不足錯誤
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
如何避免這些情況並使用穩定的代碼?
多達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);
}
使用StringBuilder
/ StringBuffer
連接字符串。 如果使用+
則每次創建新的字符串實例時(例如,從循環開始),您都會創建三個字符串(在conversa
說,您有'conversa'值):
conversa
conversa-----
converterInfoconversa-----
正如其他人已經回答的那樣,首先用StringBuilder替換字符串連接。 如果沒有幫助,請更改算法。
"At this line a huge set of paragraph text will be added by many users and then I will store it to file. "
與其創建一個大緩沖區,不如嘗試在讀取它們之后將較小的塊寫入文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.