가비지 컬렉션(Garbage Collection)?

sun·2024년 1월 15일
0

java

목록 보기
4/4

가비지 컬렉션(Garbage Collection)?

👉 정의와 목적

자바에서 중요한 메모리 관리 기법 중 하나.
더 이상 사용되지 않는 메모리를 자동으로 찾아내어 회수하는 프로세스.
유효하지 않은 참조를 찾아내어 메모리 누수를 방지.
사용 가능한 메모리 공간을 최대화 하여 프로그램의 효율성을 높임.

👉 작동 방식

1. Eden 영역에서 객체가 생성.

새로 생성되었거나 생성된지 얼마 안된 객체는 Young Generation의 Eden 영역에 할당.

2. Eden 영역이 꽉 차면 살아있는 객체만 Survivor1 영역으로 복사되고 다시 Eden 영역을 채움.

Eden 영역에 어느정도 쌓이게 되면 Servivor의 빈 공간으로 이동되거나 GC로 회수됨.

3. Survivor1 영역이 꽉 차면 다른 Survivor2 영역으로 객체가 복사됨.

이때 Eden 영역에 있는 객체들 중 살아있는 객체들도 Survivor2 영역으로 가게 됨.
즉 Survivor 영역의 둘 중 하나는 반드시 비어있어야 함.
1-3의 과정을 Minor GC 혹은 Young GC라고 함.

4. 오래 살아있는 객체들은 Old 영역으로 이동.

Young Generation 영역이 차게 되면 참조 정도에 따라 Tenured Generation(Old) 영역에 이동되거나 GC로 회수됨.

5. 지속적으로 이동하다가 Old 영역이 꽉 차면 GC가 발생.

Tenured Generation(Old) 영역에 할당된 메모리가 허용치를 넘으면 해당 영역에 있는 모든 객체들을 검사하여 참조되지 않는 객체들을 한꺼번에 삭제하는 GC가 실행.
이 과정은 시간이 오래걸리고 이때 GC를 실행하는 쓰레드를 제외한 모든 쓰레드는 작업을 중단. (Stop-the-World)
4-5의 과정을 Major GC 혹은 Full GC라고 함.

Perm 영역은 클래스나 메서드에 대한 정보가 쌓임.

👉 가비지 컬렉션 종류

다양한 가비지 컬렉션 알고리즘 사용.

  • Mark-and-Sweep : 객체들을 Mark(표시)하고 접근할 수 없는 객체를 Sweep(수집)하는 방식.
  • Generational GC : 메모리를 여러 세대(Young/Old)로 나누고 각 세대에 다른 GC 전략을 적용.
    대부분의 객체는 Young 세대에서 생성되고 소멸되지만 일정시간 동안 살아남은 객체는 Old 세대로 이동.
  • Compaction : 사용 중인 객체를 메모리의 한 쪽으로 이동 시켜 연속된 여유 공간을 만드는 방식.
    메모리 단편화를 줄여줌.

❔ 메모리 단편화 : 컴퓨터 메모리 관리에서 발생하는 문제 중 하나.
사용 가능한 메모리가 작은 조각으로 나뉘어져 있어서 충분한 크기의 연속적인 메모리 공간을 찾기 어려워지는 현상.
동적 메모리 할당을 사용하는 시스템에서 자주 발생.

👉 가비지 컬렉션 장점

  • 메모리 관리 자동화
  • 메모리 누수 방지
  • 프로그래밍의 단순화

👉 가비지 컬렉션 단점

  • 성능 오버헤드 : 가비지 컬렉션 프로세스 자체가 시스템 자원을 사용.
    가비지 컬렉션 프로세스가 실행되는 동안 추가적인 CPU 시간과 메모리 자원이 소요되기 때문에 애플리케이션의 반응 시간이 증가할 수 있음.
  • 예측 불가능한 지연 : 때때로 예측할 수 없는 지연을 발생시킬 수 있음.
  • 최적화 복잡성 : 효율적인 가비지 컬렉션을 위해서는 적절한 알고리즘 선택과 튜닝이 필요.

profile
Please, Steadily

0개의 댓글