유니티 GC 때문에 끊긴다? (프레임 드랍의 숨은 원인)

게임을 플레이하다 보면 이런 경험이 있습니다.

“FPS는 잘 나오는데 가끔씩 화면이 끊긴다”

평균 프레임은 괜찮은데, 순간적으로 툭 끊기는 느낌이 드는 경우입니다.

이 문제의 대표적인 원인 중 하나가 바로 유니티 GC (가비지 컬렉션)입니다.

👉 GC는 편리한 기능이지만, 실행되는 순간 프레임 드랍을 만들 수 있습니다.


//
//

유니티 GC란 무엇인가

유니티는 C# 기반 엔진이기 때문에 자동 메모리 관리 시스템인 GC를 사용합니다.

GC는 더 이상 사용되지 않는 객체를 자동으로 정리해주는 기능입니다.

개발자가 직접 메모리를 해제하지 않아도 되기 때문에 매우 편리합니다.

하지만 문제가 있습니다.

👉 GC가 실행되는 순간, 메인 스레드가 멈출 수 있습니다.

이때 플레이어 입장에서는 “끊김”으로 느껴집니다.


왜 GC가 프레임 드랍을 만드는가

유니티 GC 실행 시 프레임이 멈추는 과정을 설명하는 성능 다이어그램
GC가 실행되는 순간 메인 스레드가 멈추면서 프레임 드랍이 발생할 수 있습니다.

👉 GC는 눈에 보이지 않지만, 실제 플레이 경험에는 큰 영향을 줍니다.

 

일반적인 프레임 흐름은 일정합니다.

프레임 → 프레임 → 프레임 → 프레임

하지만 GC가 발생하면 흐름이 이렇게 바뀝니다.

프레임 → 프레임 → GC 실행 (정지) → 프레임

이 짧은 멈춤이 바로 체감되는 끊김입니다.

👉 FPS 평균보다 중요한 것은 “프레임 안정성”입니다.


//

GC가 자주 발생하는 이유

GC는 메모리 할당이 누적될수록 발생합니다.

특히 다음과 같은 상황에서 자주 발생합니다.

  • Update에서 new 객체 생성
  • string 연산 반복
  • LINQ 사용
  • 박싱(Boxing) 발생
  • 불필요한 배열 생성

이러한 작은 할당이 쌓이면 GC가 실행됩니다.

👉 문제는 “한 번의 큰 할당”이 아니라 “작은 할당의 반복”입니다.


유니티 GC 문제의 핵심

GC 자체는 나쁜 기능이 아닙니다.

문제는 “언제 실행되느냐”입니다.

  • 게임 플레이 중 GC 발생 → 문제
  • 로딩 화면 중 GC 발생 → 괜찮음

👉 결국 핵심은 GC 발생 타이밍을 제어하는 것입니다.


정리

  • 유니티 GC는 자동 메모리 관리 시스템
  • GC 실행 시 프레임 드랍 발생 가능
  • 작은 메모리 할당이 쌓이면 GC 발생
  • 핵심은 GC 발생을 줄이고 타이밍을 관리하는 것

👉 GC를 이해하면 “이유 없는 끊김”을 해결할 수 있습니다.


다음 글에서 다룰 내용

다음 글에서는 GC가 실제로 어떻게 동작하는지 내부 구조를 설명합니다.

👉 유니티 가비지 컬렉션 동작 원리 (Managed Heap, Mark & Sweep)

//
   

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Please turn AdBlock off

Notice for AdBlock users

Please turn AdBlock off