在下面的代码中,我得到一个OutOfMemoryError
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的最有效方法是什么?
我发现在SO上有类似的问题,但我不确定他们是否回答了我的问题。
答案 0 :(得分:0)
您可以尝试一些替代方案:
1 - 增加内存(在命令行中使用-Xmx)
2 - 将字符串分解为更小的块,分析块,并且不要忘记检查块的结尾加上下一个的开头是否包含模式。
这将有助于你驯服"内存使用情况。
答案 1 :(得分:0)
Incresing heap是其中一个解决方案。 这取决于您使用的Java版本。
如果您使用的是Java6或更早版本,则字符串是PermGen区域的一部分,可以增加XX:MaxPermSize = N
如果您使用的是Java 7或Java 8,只需碰撞(-Xmx)即可。
如果您仍然遇到问题,请在链接http://www.wikiconsole.com/analyzing-out-of-memory-situations/之后提供帮助