2013年4月21日日曜日

Javaのデストラクタ?


メモリリークはいつ直すの?
今でしょ!!!



よくJavaにはデストラクタがないと言われます。

確かに、Javaは明示的なメモリ解放がないため、
デストラクタが必要ないとまことしやかに噂されています。

でもね!
メモリ解放はJavaの

System.gc();

をコールすれば明示的に解放できるんです。
ただ、メモリ解放は時間的コストが高いってのはあると思います。


デストラクタという意味ではないですが、Javaでも似た様な
機構が備わっているのはご存知でしょうか?

それは、


protected void finalize() throws Throwable {};

です!

このメソッドをオーバーライドしてあげれば、そのオブジェクトの
ファイナライズ(解放処理)を実装できます!

例えば、

protected void finalize() throws Throwable {
    super.finalize();
    myMember = null;
}

なんてやってあげれば良い訳です!

これで、メモリリークともおさらばですね!
(あれ?大げさ過ぎかな?)