在下面的代碼,我得到一個OutOfMemoryError的OutOfMemoryError Matcher.replaceAll
String resultStr = json.format(obj);
String regex = "null";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(resultStr);
resultStr = m.replaceAll("");
堆棧跟蹤低於:
at java/lang/StringBuffer.ensureCapacityImpl(StringBuffer.java:338(Compiled Code))
at java/lang/StringBuffer.append(StringBuffer.java:204(Compiled Code))
at java/lang/StringBuffer.append(StringBuffer.java:1031(Compiled Code))
at java/util/regex/Matcher.appendReplacement(Matcher.java:757(Compiled Code))
at java/util/regex/Matcher.replaceAll(Matcher.java:824(Compiled Code))
我知道的replaceAll是昂貴的,並可能導致OOM。在這種情況下避免OOM的最有效方法是什麼?
我發現在這裏有類似的問題,但我不確定他們中的任何人是否回答我的問題。
你不需要更換字面正則表達式。我的第一個建議是嘗試替換而不使用'Pattern' /'Matcher'對象。請注意,'String.replace'仍然使用正則表達式,但也確保搜索'String'是模式引用的,這可能會改善內存佔用。 – Mena
嗨,梅納,在代碼中,下一行是regex =「\\ [,\\]」;這也是以類似的方式使用模式/匹配器替換的。爲此我想我必須使用Pattern/Matcher。你怎麼看? –
以及''[,]「'好像是一個文字,因爲你正在轉義方括號。 – Mena