87.내일배움캠프 78일차 TIL <Unity Unity 2D 팀프로젝트- MartialGod:Reborn - 28일차> 07/30

정광훈(Unity_9기)·2025년 7월 30일

TIL (Today I Learned)

목록 보기
88/110
post-thumbnail

가비지 컬렉터의 세대 개념에 대해 설명해주세요.

  1. Young Generation (Young Space) - 젊은 세대
    특징: 새로 생성된 객체들이 처음 할당되는 공간입니다. 대부분의 객체는 짧은 수명을 가지므로 이 공간에서 빠르게 생성되고 소멸됩니다.

컬렉션 방식:

Minor GC (또는 Scavenge GC): Young Generation에서 발생하는 가비지 컬렉션을 Minor GC라고 합니다. 이 공간은 대부분의 객체가 금방 죽으므로, 살아있는 객체만 식별하여 다른 공간으로 이동시키는 방식으로 컬렉션이 진행됩니다.

컬렉션 빈도: 매우 자주 발생합니다. 짧은 시간 내에 많은 객체가 생성되고 소멸되기 때문입니다.

Stop-the-world: Minor GC는 상대적으로 빠르게 끝나므로 애플리케이션의 일시 중지(Stop-the-world) 시간이 짧거나 거의 감지되지 않을 수 있습니다.

구성: 일반적으로 Eden, Survivor1, Survivor2 세 개의 영역으로 구성됩니다.

Eden Space: 객체가 처음 생성되는 공간입니다.

Survivor Space (S0, S1): Eden Space에서 Minor GC 이후 살아남은 객체들이 이동하는 공간입니다. 두 개의 Survivor Space를 두어 한쪽 공간이 꽉 차면 다른 공간으로 옮겨가면서 단편화를 방지하고 오래된 객체들을 분류합니다.

  1. Old Generation (Old Space) - 오래된 세대
    특징: Young Generation에서 여러 번의 Minor GC를 거치면서도 살아남은 객체들이 이동하는 공간입니다. 이 공간의 객체들은 앞으로도 오랫동안 사용될 가능성이 높다고 판단됩니다.

컬렉션 방식:

Major GC (또는 Full GC): Old Generation에서 발생하는 가비지 컬렉션을 Major GC라고 합니다. 이 공간은 객체 수가 많고 수명이 길기 때문에 Minor GC보다 훨씬 많은 시간과 자원을 소모합니다.

컬렉션 빈도: Young Generation에 비해 훨씬 드물게 발생합니다.

Stop-the-world: Major GC는 일반적으로 애플리케이션의 상당한 일시 중지(Stop-the-world)를 유발할 수 있습니다. 이는 성능 저하의 주요 원인이 될 수 있으므로 최소화하는 것이 중요합니다.

  1. Permanent Generation / Metaspace (영구 세대 / 메타스페이스) - (선택적 또는 최신 JVM)
    특징: 클래스 메타데이터, 메소드 정보, 상수 풀 등 애플리케이션 코드에 대한 정보가 저장되는 공간입니다.

JVM 버전별 차이:

Java 7 이하: PermGen(Permanent Generation)이라고 불렸으며, 고정된 크기를 가지고 있어 OutOfMemoryError를 발생시키는 원인이 되기도 했습니다.

Java 8 이상: PermGen이 사라지고 Metaspace로 대체되었습니다. Metaspace는 기본적으로 네이티브 메모리를 사용하며, 필요한 만큼 자동으로 확장됩니다 (단, 최대 크기를 설정할 수는 있습니다).

컬렉션 방식: 메타데이터는 일반적으로 애플리케이션이 종료될 때까지 유지되므로, 이 공간에서의 GC는 매우 드물게 발생합니다.

0개의 댓글