Chapter 18

ガベージコレクタ

KeitoYuasa
KeitoYuasa
2023.02.18に更新
  • ガベージコレクタ:使用(参照)しなくなったメモリ領域を検出し、開放するJVM上で稼働するプログラムのこと。
  • JVMは、プログラムの実行やメモリの管理を行なっている。
  • プログラマがメモリの確保や解放をするためのコードを記述する必要がない。メモリの解放は、ガベージコレクタが行ってくれる。
  • JVMのメモリの確保:
    • クラスに、int型のインスタンス変数を宣言したとする。このクラスがインスタンス化されたタイミングで、int型のデータサイズである32bit文のメモリ領域が確保、使用されることになる。
  • JVMのメモリの解放:
    • JVM内のガベージコレクタが行う。
No. 注意点
1 ガベージコレクタがあるからメモリ不足が起きないわけではない。プログラマがオブジェクトをガベージコレクタの対象にする必要がある。つまり、オブジェクトを参照しなくすればいい。
2 どこからもオブジェクトが参照されなくなると、それがガベージコレクタの対象になる。

オブジェクトをガベージコレクタの対象にする方法

①nullを代入する

nullは、何も参照していないことを表現する特殊なデータ。
つまり、nullをオブジェクトに代入することで、それをガベージコレクタの対象にできる。

以下では、ガベージコレクタの対象になる例を示す。

//t2がTestオブジェクトを参照しているため、ガベージコレクタの対象ではない
Test t = new Test();
Test t2 = t;
t = null;
//Testオブジェクトはどこからも参照されていないのでガベージコレクタの対象になる
Test t = new Test();
Test t2 = t;
t = null;
t2 = null;

②他のオブジェクトを参照する

newをつけることで別の新しいメモリ領域にオブジェクトを生成している。
そのため、元のオブジェクトはどこからも参照されていないためガベージコレクタの対象になる。

// newをつけることで別の新しいオブジェクトを参照している
Test t = new Test();
t = new Test();