본문 바로가기

학습/이해하고 쓰는 작동원리

가비지 컬렉션 작동 원리

가비지 컬렉션 이란?
Garbage Collection 쓰레기 수집,
여기서 쓰레기는 프로그램이 동적으로 할당 했던 메모리 영역 중에서 필요없게 된 영역을 의미한다.
필요 없게 된 영역을 그대로 둔다면,
사용하지 않지만 선점하고 있는 메모리의 양이 늘어나게 되며,
그만큼 메모리가 낭비된다.
이런 현상을 메모리 누수 ( Memory Leak ) 라고 한다.
Unmanaged 언어인 C, C++ 등은 이런 메모리 누수 현상을 직접 다뤄야 하지만,
Managed 언어인 Java 는 가비지 컬렉션이라는 개체가 알아서 이를 해결해 준다.

 

JVM 구조와 GC 동작 조건

name 이라는 변수에 "홍길동" 이라는 객체가 담겨 있다가

"강백호" 객체를 name 에 할당해주면,

"홍길동" 객체는 참조되지않는 객체가 된다.

이런 객체들을 Java 의 GC 가 자동으로 지워준다.

Java Garbage Collection 작동원리

메모리 영역은 Young, Old, Permanent 영역으로 나뉜다.

Young, Old 영역은 Heap 영역에 포함된다.

생성된 Object 들은 Young 영역에 들어가게 되고,

Minor GC 가 동작하면 살아남은 객체들만 Old 영역으로 들어가게 된다.

Old 영역에서는 Major GC 가 동작하여 객체에 아직 참조가 남아있는지 확인한다.

 

좀더 자세하게 보겠다.

 

Young 영역이다.

Young Generation 동작 원리

1. 처음 Young 영역에 들어온 객체는 Eden 이라는 영역으로 할당된다. 

2. Minor GC 가 동작하고 Eden 영역에서 살아남은 객체는 Survivor1 으로 이동한다.

   ( 이때 Survivor1, 2 는 다른 구역일 뿐 숫자에 의미는 없다. )

3. 이후 Eden 영역이 가득 차 Minor GC 가 또 동작한다.

4. 이미 Survivor1 에는 살아남은 객체가 있으니,

    이번에는 살아남은 객체를 Survivor2 로 옮긴다.

    이때 Survivor 중 한곳은 비어있어야 한다는 규칙이 있으므로

5. Survivor1 에서 살아남았던 객체가 또 살아남는다면 Survivor2 로 이동시킨다.

6. 정해진 횟수 만큼 살아남은 객체는 Old 영역으로 이동시킨다.

 

이번엔 Old 영역이다.

Old 영역에서는 여러가지 알고리즘을 사용하여 객체를 제거한다.

 

이 알고리즘들은 사실 잘 이해가 가지 않는다.

 

출처를 따라가서 확인 바란다.

'학습 > 이해하고 쓰는 작동원리' 카테고리의 다른 글

웹 서비스 작동원리  (0) 2021.07.19
JVM 작동원리  (0) 2021.07.13