JVM 메모리 & GC 딥다이브 해보기…! (TODO)

메모리 누수는 어디서 일어날까?

public class Stack {
    private Object[] elements;
    private int size = 0;
    private static final int DEFAULT_CAPACITY = 16;

    public Stack() {
        elements = new Object[DEFAULT_CAPACITY];
    }

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

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

캐시에서의 메모리 누수

객체 참조를 캐시에 넣어두고, 이 사실을 잊은 채 그 객체를 계속해서 놔두는 경우를 흔히 볼 수 있음

리스너(listener) 혹은 콜백(callback)에서의 메모리 누수

추가내용