在下面的代码,我得到一个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