メモリリークはいつ直すの?
「今でしょ!!!」
「今でしょ!!!」
よくJavaにはデストラクタがないと言われます。
確かに、Javaは明示的なメモリ解放がないため、
デストラクタが必要ないとまことしやかに噂されています。
でもね!
メモリ解放はJavaの
System.gc();
をコールすれば明示的に解放できるんです。
ただ、メモリ解放は時間的コストが高いってのはあると思います。
デストラクタという意味ではないですが、Javaでも似た様な
機構が備わっているのはご存知でしょうか?
それは、
protected void finalize() throws Throwable {};
です!
このメソッドをオーバーライドしてあげれば、そのオブジェクトの
ファイナライズ(解放処理)を実装できます!
例えば、
protected void finalize() throws Throwable {
super.finalize();
myMember = null;
}
なんてやってあげれば良い訳です!
これで、メモリリークともおさらばですね!
(あれ?大げさ過ぎかな?)