テキスト ファイル (>1g) を読み取り、文字列を処理する簡単なコードをいくつか書きました。
ただし、ある時点でメモリ使用量が大きくなっている文字列を(StringBuilderを使用して)追加しようとするため、Javaヒープスペースの問題に対処する必要があります。'-Xmx1024' などを使用してヒープ スペースを増やすことができることはわかっていますが、ここではメモリをほとんど使用しないで作業したいと考えています。以下のコードを変更して操作を管理するにはどうすればよいですか?
私はまだ Java の初心者であり、コードに明らかな間違いを犯した可能性があります。
コード スニペットは次のとおりです。
private void setInputData() {
Pattern pat = Pattern.compile("regex");
BufferedReader br = null;
Matcher mat = null;
try {
File myFile = new File("myFile");
FileReader fr = new FileReader(myFile);
br = new BufferedReader(fr);
String line = null;
String appendThisString = null;
String processThisString = null;
StringBuilder stringBuilder = new StringBuilder();
while ((line = br.readLine()) != null) {
mat = pat.matcher(line);
if (mat.find()) {
appendThisString = mat.group(1);
}
if (line.contains("|")) {
processThisString = line.replace(" ", "").replace("|", "\t");
stringBuilder.append(processThisString).append("\t").append(appendThisString);
stringBuilder.append("\n");
}
}
// doSomethingWithTheString(stringBuilder.toString());
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
エラーメッセージは次のとおりです。
スレッド「メイン」の例外 java.lang.OutOfMemoryError: Java ヒープ領域 java.util.Arrays.copyOf(Arrays.java:2367) で java.lang.AbstractStringBuilder.expandCapacity (AbstractStringBuilder.java:130) で java.lang.AbstractStringBuilder.ensureCapacityInternal (AbstractStringBuilder.java:114) で java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:415) で java.lang.StringBuilder.append(StringBuilder.java:132) で Test.setInputData(Test.java:47) で Test.go (Test.java:18) で Test.main (Test.java:13) で