오브젝트 풀은 언제 손해인가
Esc

    오브젝트 풀은 언제 손해인가

    Unity최적화

    결론부터 쓰면, 생성 비용이 싼 객체를 풀링하면 오히려 느려집니다. 풀은 공짜가 아니라서 가져오고 돌려주는 비용이 매번 붙고, 미리 채워두는 만큼 초기 비용도 먼저 냅니다.

    풀이 바꾸는 것

    풀링은 “빨라지는 기술”이 아니라 객체를 버리지 않는 기술입니다.

    매번 생성과 풀 사용의 흐름 비교 버리지 않으니 GC 가 수거할 것도 없습니다.

    버려진 객체는 그 자리에서 사라지지 않고 GC 가 돌 때까지 메모리에 남습니다. 그래서 “매번 생성”의 대가는 생성 비용이 아니라 나중에 몰아서 오는 정지입니다.

    메모리가 쌓이는 모양 개념도 실측 그래프가 아니라 패턴을 그린 것입니다.

    말로는 잘 안 와닿아서 움직이는 걸로 만들어 뒀습니다. 방식을 바꿔가며 보세요 — “매번 생성”에서만 만든 객체 수가 계속 오르고 GC 막대가 차오릅니다.

    직접 굴려보기

    말보다 숫자가 빠릅니다. 재사용 횟수와 객체 하나의 생성 비용을 바꿔보면 풀링이 손해가 되는 구간이 어디인지 바로 보입니다. 재사용 10회 + 가벼움으로 두면 풀이 집니다.

    재사용이 열 번 이하이고 객체가 가벼우면 풀이 지는 구간이 나옵니다. 이때는 풀을 걷어내는 게 최적화입니다.

    할당을 걷어낸 쪽은 확실히 이득

    풀링과 별개로, 매 프레임 새 리스트를 만드는 건 거의 항상 손해입니다.

    판단 순서

    무엇부터 볼지 헷갈리면 이 순서로 봅니다.

    측정하지 않은 최적화는 최적화가 아닙니다. 풀링도 예외가 아닙니다.