今ありのまま。。。
今日ありのまま起こったことを言うぜ。
sbt 上の Scala で FileWriter で書いたら sbt 落とすまでJVMがファイルハンドル握って離さない現象に遭遇。
下記が事実上同じコード(sbt11 JDK6 update29)
import java.io.FileWriter object Sample extends App { def using[T <: { def close() }, S](resource:T)(f: T => S) = { try { f(resource) } finally { resource.close() } } using(new FileWriter("test/sample.txt")) { res => res.write("Hello\r\n") } }
一体何が起こったのか分からなくて別PCで再現しようとしたんだ(sbt12.2 jdk 1.6.0_29 b11)。
問題なく削除できたんだ、、、、b11 の微妙なバージョン問題?
いや、SBTのバージョン固有の問題なんだろうか?そっちのほうが可能性が高そうだ。
何か海外のほうで、どうもデストラクタを使ってるか何かの影響で、ガベージを複数回実行しないとファイルハンドルを離さない現象が確認されているようだ。
http://aspsp.blogspot.jp/2010/11/file-handles-in-jvm.html
謎が深まる、、、。