簡體   English   中英

OutOfMemoryError Matcher.replaceAll

[英]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版本。

  1. 如果您使用的是Java6或更早版本,則字符串是PermGen區域的一部分,並且可以增加XX:MaxPermSize = N

  2. 如果您使用的是Java 7或Java 8,則簡單地使用(-Xmx)會有所幫助。

如果您仍然遇到問題,請通過以下鏈接http://www.wikiconsole.com/analyzing-out-of-memory-situations/進行幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM