メモリの解放

release.png

Cの場合はdelete
Javaの場合はオブジェクトにnullを代入すれば後でGCが解放してくれる。
じゃあ、javaでArrayListに入ったオブジェクトはどうやって解放される?
例えば下のコードのように。ArrayListからオブジェクトの参照を取って来てそれにnullを入れてもダメです。
おすすめのやり方は、

MyObject ref=arraylist.remove(index);
ref.clean();//独自にメンバを解放するコードを中に書く

参照だけ消しても、オブジェクトのメンバのメモリは生きたままだからね
public static void main(String[] args) {
        ArrayList<Daughtor> list=new ArrayList<Daughtor>();
        Daughtor a=new Daughtor(1.0);
        Daughtor b=new Daughtor(2.0);
        Daughtor c=new Daughtor(3.0);
        list.add(a);
        list.add(b);
        list.add(c);
        System.out.println("size="+list.size());
        Daughtor ref=list.get(0);
        ref=null;
        System.out.println("size2="+list.size());
    }

実行結果
size=3
size2=3

じゃあ、ArrayListのremove使えばいい? これだけではダメ。元のインスタンスは生きたままである。
ArrayListのサイズはちゃんと減るけど
Daughtor ref=list.get(0);
        list.remove(0);
        System.out.println("size="+list.size());
        System.out.println("元のインスタンスはどうなった?="+ref.mValue);

実行結果
size=2
元のインスタンスはどうなった?=1.0

sizeを

memory

サポートサイト Wikidot.com memory