最近は性能問題が徐々に収束してきました。 解決された問題のうちの1つをここで紹介したいと思います。 「あるバッチプログラムの性能要件が100万件のデータを60分で処理しないといけない」というものがあったのですが、計測してみると2.5時間で40万件弱しか処理できないという問題がありました。(このデータから100万件にかかる時間を算出すると17時間。。。) このバッチプログラム、最初の15分間は処理量が6500件だったのに、時間が経過していくとどんどん劣化し、3時間経過で800件前後となり、その後は徐々に劣化していく、かなりお粗末なプログラムでした。 メモリリークは発生していなかったので、ログを埋め込んで時間のかかっている処理を切り分けていくとDBから取得したデータをArrayListに格納し、それを存在チェックしている箇所(ArrayList#contains)がボトルネックであることが判明