JVM에는 GC(가비지 컬렉터)가 있지만, 그렇다고 해서 메모리 관리에 신경쓰지 않아도 되는 것은 아니다!

public class Stack {

	private static final int DEFAULT_INITIAL_CAPACITY = 16;

	private Obejct[] elements;
	private int size = 0;
	
	public Stack() {
			elements = new Object[DEFAULT_INITIAL_CAPACITY];
	}

	public void push(final Object e) {
			ensureCapacity();
			elements[size++] = e;
	}

	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);
			}
}

그렇다면, 위의 코드에서 메모리 누수는 어디서 일어날까?

해법은 간단하다! → 해당 참조를 다 썼을 때 null 처리 하자.

public Object pop() {

		if (size == 0) {
			return new EmptyStackException();
		}

		Object result = elements[--size];
		elements[size] = null; // 다 쓴 참조 해제
		return result;

다 쓴 참조를 null 처리하면 다른 이점도 따라온다!

<aside> 💡 하지만, 모든 객체를 일일이 쓰자마자 null 처리를 할 필요는 없다!

</aside>