このメソッドを呼び出すと、java outOfMemoryErrorが発生します。これをループで使用して、多数の大きなファイルを順番に解析しています。私の推測ではresult.toString()
、ループ中にガベージコレクションが適切に収集されていません。もしそうなら、どのように修正すればよいですか?
private String matchHelper(String buffer, String regex, String method){
Pattern abbrev_p = Pattern.compile(regex);//norms U.S.A., B.S., PH.D, PH.D.
Matcher abbrev_matcher = abbrev_p.matcher(buffer);
StringBuffer result = new StringBuffer();
while (abbrev_matcher.find()){
abbrev_matcher.appendReplacement(result, abbrevHelper(abbrev_matcher));
}
abbrev_matcher.appendTail(result);
String tempResult = result.toString(); //ERROR OCCURS HERE
return tempResult;
}