NIO (単一ファイルの読み取りが最も遅い)、BufferedInputStream を使用してファイルを文字列に読み取るいくつかのアプローチのパフォーマンスを測定しようとしました。バッファとして機能する固定サイズ (最速)
ファイルは、Windows .txt ファイル形式の 95 MB の純粋なテキストでした。文字を文字列に変換することは実際にはボトルネックですが、私が気づいたのは、このメソッドの膨大なメモリ消費です。95 MB の lorem ipsum の場合、これは最大 1 GB の RAM を消費します。理由はわかりません。
私が効果なしで試したこと:
System.gc() を呼び出してガベージ コレクターを発行する メソッドが終了する前に、すべてのポインター変数を null に設定します (ただし、メソッド内でのみ定義されている必要があります)。
private void testCharStream() {
File f = f = new File("c:/Downloads/test.txt");
long oldTime = System.currentTimeMillis();
char[] cbuf = new char[8192];
StringBuilder builder = new StringBuilder();
try {
FileReader reader = new FileReader(f);
while (reader.read(cbuf) != -1) {
builder.append(cbuf);
}
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long currentTime = System.currentTimeMillis();
System.out.println(currentTime - oldTime);
}