를, 내가 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))
나는 완전히 대체하기는 비싸고 OOM을 일으킬 수 있습니다 알고 있습니다. 이런 경우에 OOM을 피하는 가장 효율적인 방법은 무엇입니까?
나는 비슷한 질문이 있음을 알았지 만, 그들 중 누구도 내 질문에 답하는 지 모르겠습니다. 청크를 분석, 작은 덩어리로 문자열을 브레이크하고하는 것을 잊지 마세요 - (명령 줄에서 -Xmx를 사용하여)
2 메모리를 증가 -
1 :
당신은 리터럴을 교체하는 정규 표현식을하지 않아도 도움이 될 것을 게시 할 수 있습니다. 나의 첫 번째 충고는'Pattern' /'Matcher' 객체없이 바꾸는 것이다. 'String.replace'는 여전히 정규 표현식을 사용하고 있지만'String'은 패턴 인용 부호가 붙어 있으므로 메모리 사용량을 향상시킬 수 있습니다. – Mena
안녕하세요 Mena, 코드에서 다음 줄은 regex = "\\ [, \\]"; 유사한 방식으로 Pattern/Matcher를 사용하여 대체됩니다. 이를 위해 Pattern/Matcher를 사용해야 할 것입니다. 어떻게 생각해? –
대괄호를 벗어 났으므로 잘 ""[,] "'문자 그대로 인 것 같습니다. – Mena