実現したいこと
java.io.Fileのlist関数を用いて特定のディレクトリにあるファイルの一覧を取得する処理を実装しています。
javaのバージョンをJava6⇒Java8にバージョンアップした環境においてlist関数の処理速度が著しく低下するパターンがあります。
具体的には、400ファイル程度のファイル数を参照しに行こうとするまでは1秒未満で処理が完了するのですが、
それ以上のファイル数を取得しようとすると、1分半程度処理に時間がかかる形になります。
上記はjava8での傾向で、java6環境においては基本的に処理時間は線形的に伸びている傾向です。
処理の傾向として、java6で実行した際には特段ソートなどされずにファイルがランダムに一覧化されているのですが、
java8で実行した際には処理速度が速い場合(400ファイル未満)にはファイルがソートされた状態で一覧化され、
処理が遅い場合(400ファイル以上)にはファイルがソートされていない状態で一覧化されています。
状況を見るにjava8においてはList関数が勝手にソートをするような動きをしており、
ソートしきれないファイル数になった段階でうまく処理が出来ず処理性能が低下しているのかと考えております。
java6においては特段そういった動きがないので線形的に処理時間が遷移しているのかなと考えています。
そういった非互換の事例、もしくは何が原因かを絞る手立てがありましたらご教授願いたく思います。
(java.nio.Fileなどのメソッドがあることも調べておりますが、別のメソッドを使うのは最終手段としたく....)
前提
実行環境
古い環境:java1.6.0_37/Windows Server 2012
新しい環境:java 1.8.0_202/Windows Server 2016
発生している問題・エラーメッセージ
特段エラーは出ておりません。
処理速度が著しく劣化しているというものです。
該当のソースコード
試したこと
javaの割り当てメモリ(-Xmxなどで指定する項目)の増強
CPUの増強
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
0 コメント