File.createTempFile() と File.deleteOnExit() のコンボ罠
巷ではかなーり昔から認識されている爆弾コードらしい。
String prefix = "testDeleteOnExit_"; String suffix = ".txt"; File in = File.createTempFile(prefix, suffix); in.deleteOnExit(); // 安全のため
いや、全然「安全」じゃない、むしろ危険らしいんですけど‥
- deleteOnExit() does not work - 路傍のプログラマ
- http://www.bobcongdon.net/blog/2005/07/filedeleteonexit-is-evil.html
- Bug ID: JDK-4513817 File.deleteOnExit consumes memory
というか、サーバーアプリでこれはない‥基本的には exit() しないのだし‥orz
このコードを初めて見たとき(3年位前かなぁ‥)に、一瞬「嫌なにおい」を嗅ぎ取ったのだが、その時は「動いているもの触るべからず」と強く思っていたのでそのまま放置したが、これが最近になってあだとなった形だ。
まだ自分の手元で再現はできていないけど、バグレポートを見る限りではものすごく簡単な処理を大量に走らせれば発生するようだ。