これはユーティリティクラスを実装するときに気をつけた方が良いことです。~ 普段の実装ではまず登場しませんし、登場してはいけません。~ ~ ''Javaではメモリ管理はガベージコレクションが勝手にやるから、意識する必要がない''というのが一般的です。~ しかし、特定の場面では意識する必要があります。~ 以下のサンプルを見てください。 ** サンプルプログラム [#lf2f4c2c] #sh(java){{ import java.util.Arrays; import java.util.EmptyStackException; public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { this.elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object obj) { ensureCapacity(); elements[size++] = obj; } public Object pop() { if (size == 0) { throw new EmptyStackException(); } // ここでメモリリーク発生 return elements[--size]; } private void ensureCapacity() { if (elements.length == size) { elements = Arrays.copyOf(elements, 2 * size + 1); } } } }} このプログラムの場合、popメソッドで要素取得時に取得した要素を消していないため、 ガベージコレクトされません。~ ~ ガベージコレクト対象にするために、以下のように修正します。 ** 修正プログラム [#maaddbd1] #sh(java){{ public Object pop() { if (size == 0) { throw new EmptyStackException(); } Object obj = elements[--size]; // 参照外し elements[size] = null; return obj; } }} ** まとめ [#p0850eaf] このようにJavaではメモリ管理がまったく不要なわけではありません。~ しかし、このようなケースはごくまれで、例外的なケースです。