[Java] : GC가 필요한 이유, 동작 방식

dohyoungK·2024년 2월 28일
0

면접 스크립트

목록 보기
5/25
post-thumbnail

[Java] GC가 필요한 이유, 동작방식


Garbage Collector

Garbage Collector는 힙 영역에서 더이상 사용되지 않는 객체들을 제거하고 메모리를 회수하는 역할

GC 필요성

메모리를 동적으로 할당하고 사용한 후, 해제하지 않으면 메모리 누수가 발생해 시스템의 성능 저하나 프로그램의 불안정성을 초래할 수 있다. 하지만 GC는 주로 메모리 누수와 같은 문제를 방지하고, 메모리 관리를 효율적으로 수행하는데 사용된다. 또한 개발자가 직접 메모리 해제 작업을 수행하지 않아도 되기 때문에 개발에 집중할 수 있다.

GC 동작방식

  1. Stop The World : JVM이 GC를 실행하기 위해 애플리케이션의 실행을 멈추는 작업. GC를 실행하는 쓰레드 외 다른 모든 쓰레드는 작업이 중단된다.

  2. Mark And Sweep : Stop The World 이후, GC가 사용되지 않는 메모리를 식별하는 과정을 Mark, 이 메모리들을 제거하는 과정을 Sweep이라 한다.

GC 과정 (Minor GC -> Major GC)

  • Young 영역 : 새롭게 생성한 객체들이 위치한다. 대부분의 객체는 금방 접근 불가능한 상태가 되므로 많은 객체가 Young 영역에 생성되었다가 사라진다. Young 영역은 1개의 Eden 영역(새로 생성된 객체 할당되는 영역)과 2개의 Survivor 영역(최소 1번 이상의 GC이후 남은 객체가 존재하는 영역)으로 구성된다.

  • Old 영역 : Young 영역에서 계속 사용되어 살아남은 객체가 존재하는 영역이다.

    1. Eden 영역에 새로 생성된 객체가 할당된다.
    2. Stop The World -> Mark And Sweep GC를 실행한다.
    3. GC에서 살아남은 객체를 첫 Survivor 영역으로 이동시킨다.
    4. 첫 Survivor 영역이 포화되면 객체를 두번째 Survivor 영역으로 이동시킨다.
    5. 일정 횟수 이상 살아남은 객체를 Old 영역으로 이동시킨다.
    6. Young 영역에서 넘어온 객체들에 의해 Old 영역의 메모리가 부족해지면 Major GC가 발생한다.

0개의 댓글