JavaのString#substringによるメモリリーク。
今の案件では、単体テストフェーズでJTESTを実施するようになっているのですが、
そこでたまに出てくる
CODSTA.EPC.UST
文字列の構文解析には、'indexOf()' や 'substring()' ではなく 'StringTokenizer' を使用する
という文言。
で、この辺なんでだろうと思ったら、どうもメモリリークを引き起こす可能性があるらしく。
String#substringによるメモリリークの可能性 - Qiita
String#substringは新しい文字列をnew Stringで生成するにも関わらず切り出し前の文字列を内部(のchar配列)で保持してしまっています。
本内容は通常は意識する必要はありませんが、巨大な文字列をsubstring操作する際はメモリリーク等につながる場合がありますので注意が必要です。 (String#splitにも同様の問題があります)
ということだったので、この記事を参考に修正をしました。
実際に直した際はこの書き方に修正。
String s3 = new String(s1.substring(5));
こういうのって「そうなんだー」とは思うけどなかなか「で、なんで?」を調べなかったりするのでメモメモ。