<aside>
📎 ITEM7 다 쓴 객체 참조를 해제하라
</aside>
Garbage Collector
- 자바는 Garbage Collector 를 갖춘 언어
- 메모리를 직접 관리해야하는 C/C++과 달리, 다 쓴 객체를 알아서 회수해준다.
- JVM에서 GC의 스케줄링을 담당
- 객체는 힙 영역에 저장되고 스택 영역에 이를 가리키는 주소값이 저장되는데
참조되지 않는(자신을 가리키는 포인터가 없는, unreachable) 객체를 메모리에서 제거한다.
Person person = new Person();
person.setName("Mang");
// garbage 발생
person = new Person();
person.setName("MangKyu");
메모리 누수
- 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상
- Old 영역에 계속 누적된 객체로 인해 Major GC가 빈번하게 발생하게 되면서 성능 저하를 불러온다.
- 디스크 페이징이나 OutOfMemoryError 를 일으켜 프로그램이 종료될 수도 있다.
public Object pop() {
if(size==0) throw new EmptyStackException();
return elements[--size];
}
public Object pop() {
if(size==0) throw new EmptyStackException();
Object result = elements[--size];
elements[size] = null;
return result;
}
해결 방법(1) : null 처리
- 해당 참조를 다 썼을 때 null 처리(참조 해제)를 해주는 방법
- 사용이 끝난 참조에 실수로 접근하는 경우 NullPointerException을 내주는 효과도 있다.
- 예외적인 경우에만 사용하자 : 자기 메모리를 직접 관리하는 클래스의 경우
- 그 외에는 프로그램을 필요 이상으로 지저분하게 만들 뿐