は、私は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を回避する最も効率的な方法は何ですか?
私はSOに類似の質問があることがわかりましたが、私の質問に答えているかどうかはわかりません。
を助けるべきである、ということ投稿してください。私の最初のアドバイスは 'Pattern' /' Matcher'オブジェクトなしで置き換えることです。 'String.replace'はまだフードの中で正規表現を使用していますが、' String'はパターンクォートされているので、メモリフットプリントが改善されることに注意してください。 – Mena
こんにちはMena、コードでは、次の行はregex = "\\ [、\\]";同様にPattern/Matcherを使用して置き換えられます。このためには、Pattern/Matcherを使用する必要があると思います。どう思いますか? –
あなたは角括弧をエスケープしているので、 '' [、] ''のためにもリテラルであるようです。 – Mena