가비지 컬렉션이란?
- 자바가 실행되는 JVM 에서 사용되는 객체, 즉 Heap 영역의 객체를 관리해 주는 기능을 말합니다.
- 사용하지 않는 객체는 메모리에서 삭제하는 작업을 GC라고 부르며 JVM에서 GC를 수행합니다.
- 이 과정에서 stop the world 가 일어나게 되며, 이 일련 과정을 효율적으로 하기 위해서는 가비지 컬렉터 변경 또는 세부 값 조정이 필요합니다.
JVM의 메모리는 총 5가지 영역(class, stack, heap, native method, PC)으로 나뉘는데, GC는 힙 메모리만 다룹니다.
일반적으로 다음과 같은 경우에 GC의 대상이 됩니다.
- 객체가 NULL인 경우 (ex. String str = null)
- 블럭 실행 종료 후, 블럭 안에서 생성된 객체
- 부모 객체가 NULL인 경우, 포함하는 자식 객체
가비지 컬렉션 메모리 해제 과정은?
GC의 메모리 해제 과정
1. Marking
프로세스는 마킹을 호출합니다. 이것은 GC가 메모리가 사용되는지 아닌지를 찾아냅니다.
2. Normal Deletion
참조되지 않는 객체를 제거하고, 메모리를 반환합니다.
3. Compacting
- 참조되지 않는 객체를 제거하고 또한 남은 참조되어지는 객체들을 묶습니다.
- 이들을 묶음으로서 공간이 생기므로 새로운 메모리 할당 시에 더 쉽고 빠르게 진행 할 수 있습니다.
Weak Generational Hypothesis
신규로 생성한 객체의 대부분은 금방 사용하지 않는 상태가 되고, 오래된 객체에서 신규 객체로의 참조는 매우 적게 존재한다는 가설입니다.
이 가설에 기반하여 자바는 Young 영역과 Old 영역으로 메모리를 분할하고, 신규로 생성되는 객체는 Young 영역에 보관하고, 오랫동안 살아남은 객체는 Old 영역에 보관합니다.
Generational Gabage Collection
1. Young 영역(Yong Generation 영역)
- 새롭게 생성한 객체의 대부분이 여기에 위치합니다.
- 이 영역에서 객체가 사라질때 Minor GC 가 발생한다고 말합니다.
2. Old 영역(Old Generation 영역)
- 접근 불가능 상태로 되지 않아 Young 영역에서 살아남은 객체가 여기로 복사됩니다.
- 이 영역에서 객체가 사라질 때 Major GC(혹은 Full GC) 가 발생한다고 말합니다.
3. Permanet 영역
- Method Area라고도 합니다. JVM이 클래스들과 메소드들을 설명하기 위해 필요한 메타데이터들을 포함하고 있습니다. JDK8부터는 PermGen은 Metaspace로 교체됩니다.
참고)
'CS > Java' 카테고리의 다른 글
역직렬화란? (0) | 2023.03.06 |
---|---|
직렬화란? (0) | 2023.03.06 |
Java의 메모리 영역은? (0) | 2023.03.06 |
자바 컴파일 과정 (0) | 2023.03.06 |
JVM이란? (0) | 2023.03.06 |