- 자바에서 가비지 컬렉션(GC)은 프로그램이 동적으로 할당한 메모리 중에서 더 이상 사용되지 않는 부분을 자동으로 찾아서 해제하는 메커니즘입니다. 이 과정은 메모리 누수를 방지하고, 프로그램의 안정성을 유지하는 데 도움을 줍니다.
가비지 컬렉션의 기본 원리는 '도달 가능성(Reachability)' 분석입니다. 특정 객체가 '도달 가능한' 상태라는 것은 프로그램의 루트 집합(Root Set)에서 출발하여 참조를 따라갔을 때 도달할수 있는 객체를 의미합니다. 루트 집합에는 지역변수, 활성 스레드, 정적 변수 등이 포함됩니다. GC는 이러한 루트 집합으로부터 시작하여 참조되는 객체들을 추적하고, 추적되지 않는 객체들을가비지로 판단하여 메모리를 회수합니다.
자바에서는 주로 마크-스위프트(Mark-Sweep), 카피(Copy), 그리고 세대별(Generational) 수집 같은 다양한 컬렉션 알고리즘을 사용합니다. 세대별 수집 알고리즘은 객체의 생명주기를 기반으로 메모리를 관리하는데, 대부분의 객체는 생성된 후 짧은 시간 내에 소멸한다는 가설 하에 설계되었습니다. 이를 통해 효율적으로 메모리를 관리하고, 애플리케이션의 성능을 최적화 합니다.
자바컬렉션(GC)의 대표적인 문제점
- 개발자가 메모리가 언제 해제되었는지 정확하게 알 수 없다
- 가비지 컬렉션(GC) 동작하는 동안에는 다른 동작을 멈추기 때문에 오버헤드가 발생한다.
- GC가 너무 자주 실행되면 소프트웨어 성능 하락의 문제가 되기도 한다.
Minor GC 와 Major GC
JVM의 Heap 영역은 처음 설계될 때 다음의 2가지를 전제로 설계되었다.
- 대부분의 객체는 금방 접근 불가능한 상태가 된다.
- 오래된 객체에서 새로운 객체로의 참조는 아주 적게 존재한다.
즉, 객체는 대부분 일회성이며 메모리에 오랫동안 남아있는 경우가 드물다.
Minor GC
- 새롭게 생성된 객체가 할당(Allocation) 되는 영역이다.
- 대부분의 객체가 금방 Unreachable 상태가 되기 때문에, 많은 객체가 Young 영역에 생성되었다가 사라진다.
- Young 영역에 대한 가비지 컬렉션(Garbage Collection)을 Minor GC라고 부른다.
MajorGC
- Young 영역에서 Reachable 상태를 유지하며 살아남은 객체가 복사되는영역이다.
- Young 영역보다 크게 할당되며, 영역의 크기가 큰 만큰 가비지는 적게 발생된다.
- Old 영역에 대한 가비지 컬렉션(Garbage Collection)을 Major GC라고 부른다.
가비지 컬렉션 소멸 대상 선정 방법
객체가 Garbage인지를 판단하기 위해 Rechability라는 개념을 사용한다.
어떠한 힙 영역에 할당된 객체가 유효한 참조가 있으면 rechability, 없다면 unrechability로 판단한다.
(최초에 참고한 것을 Root Set이라고 칭한다. )
'기술면접' 카테고리의 다른 글
추상 클래스와 인터페이스의 차이점은 무엇이며, 각각을 사용하는 적절한 시나리오에 대해 설명해주세요. (0) | 2024.05.12 |
---|---|
멀티 프로세스 대신 멀티 스레드를 사용하는 이유는 무엇인가요? (0) | 2024.05.08 |
멀티스레드 프로그래밍에서 동기화(Synchronization)가 왜 필요한가요? 예를 들어 설명해주세요. (0) | 2024.05.08 |