ブログリトライ

初心に戻って運営するブログです

JDBCのStatementとResultSetを明示的にcloseしない時の動き

てっきりConnection、Statement、ResultSetって明示的にcloseしないときちんと解放される事が保障されないと思ってたんだけど、どうやらGC時に自動的に解放されるような記述を発見。

Java2のJavadocに「GC時に自動closeされてる」なんて書かれるようになったような気がしています。

わんこ日記(2004-01-11)

で、実際にSunのjavadocを見ると確かに書いてある。

オブジェクトは、ガベージコレクトされるときは自動的にクローズされます。

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/sql/Statement.html#close()

オブジェクトがガベージコレクトされるときにも自動的にクローズされます。

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/sql/ResultSet.html#close()

ということで、某サイトは幾らかConnectionの閉じ忘れがありそうなのも問題だけど、そもそもStatementとResultSetを明示的にcloseしていない為、GCが走っていると思われる時間帯が異常に重いのではないかと推測。

広範囲にわたる修正になりそうだ。。。