2016-08-30 1 views
-4

Files.readAllLinesを使用して2000のテキストファイルを読み込んでいますが、100MBを消費しています。 JVMが2000のファイルを読み込むための100MBの+を取っている多くのファイルを読んでいるときにパフォーマンスの問題が発生する

Charset charset = Charset.forName("ISO-8859-1"); 
try { 
    Files.readAllLines(Paths.get(fileName), charset); 
} catch (Exception e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

ここ

は、コードスニペットです。 (私はJVisualVMでチェックしました) 私は何かここで間違っていますか?

+2

すべてのファイルが必要な場合、または処理を1つずつ行うことができます。それはあなたの要求に依存します。賢明に選択し、適切な方法を選択してファイルを読み取ります。 –

+0

バッチ操作を検討してください。 – Pawan

+0

JVMが実際に必要なメモリより多くのメモリを消費することがあります。 -XmxのようなJVMの引数を使って調整できます。 –

答えて

1

さて、1000個のテキストファイルがあります。それらのコードをすべてメモリに読み込みます。したがって、文字列を含む多くのリストが作成されます。

あなたがすべてを望んでいないなら、なぜファイルをメモリに読み込む方法を使用していますか?

か、具体的な答えを与えるために:あなたのコードは結構です(もちろん、あなたの実際のコードは、それがすべてのこれらのファイルを読むためにあまり意味がありませんよう

List<String> allTheLines = Files... 

のようなものを持っていると仮定

この意味で、あなたが実際にしたくないことが実際にはありません。すべての行がメモリに格納されている場合は、興味深い方法がありますそれは、いくつかはJava8コードを参照してください。

関連する問題