[英]OutOfMemoryError Matcher.replaceAll
在下面的代碼中,我收到一個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上也有類似的問題,但是我不確定它們是否能回答我的問題。
您可以嘗試以下替代方法:
1-增加內存(在命令行中使用-Xmx)
2-將字符串分成較小的塊,分析塊,並且不要忘記檢查塊的末尾加上下一個塊的開頭是否包含模式。
這將幫助您“馴服”內存使用情況。
增加堆是解決方案之一。 這取決於您使用的Java版本。
如果您使用的是Java6或更早版本,則字符串是PermGen區域的一部分,並且可以增加XX:MaxPermSize = N
如果您使用的是Java 7或Java 8,則簡單地使用(-Xmx)會有所幫助。
如果您仍然遇到問題,請通過以下鏈接http://www.wikiconsole.com/analyzing-out-of-memory-situations/進行幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.