item 07 : 다 쓴 객체 참조를 해제하라
메모리 누수
문제가 되는 코드
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() {
elements = new Object[DEFAULT_INITIAL_CAPACITY];
}
public void push(Object e) {
ensureCapacity();
elements[size++] = e; // size를 증가시키기 전에 요소를 추가
}
public Object pop() {
if (size == 0) throw new EmptyStackException();
return elements[--size]; // size를 감소시키고 요소를 반환
}
// 원소를 위한 공간을 적어도 하나 이상 확보한다.
// 배열 크기를 늘려야 할 때마다 대략 두 배씩 늘린다.
private void ensureCapacity() {
if (elements.length == size) {
elements = Arrays.copyOf(elements, 2 * size + 1);
}
}
}
메모리 누수 위치
메모리 누수에 대한 이해
Java에서 메모리 누수의 이해와 예제
1. ThreadLocal 사용
2. 정적 참조 객체
3. 침식된 서브스트링
추가 주제: 가비지 수집의 이해
메모리 누수 원인(책 버전)
예방 방법
핵심 정리
메모리 누수 해결 방법
메모리 누수 방지 방법 요약
Last updated