안녕하세요 21-117 입니다!
개발자라면 누구나 최적화에 대해
고민을 많이 해보셨거나 하고 계실 겁니다.
이번에는 최적화 과정 중 필수적인 개념이라고 해도 과언이 아닌
오브젝트 풀링 (Object Pooling)에 대해 알아보겠습니다.
오브젝트 풀링 (Object Pooling) 이란?
오브젝트를 미리 생성해놓고 필요할 때마다 재활용 하는 방식
( 생성과 파괴를 반복 하던 기존 방식을 메모리 차원에서 효율적으로 관리하기 위해 나온 방식)
이해가 잘 안될 수 있으니 방식과 차이점을 알아볼까요?
스탠다드 방식과 오브젝트 풀링 구현 방식
스탠다드
오브젝트를 Instantiate 를 통해 생성하고 Destroy 함수를 활용해 파괴하는 방식
오브젝트 풀링
오브젝트를 Instantiate 를 통해 생성하고 SetActive 함수를 활용해 비활성화 하는 방식
간단히 말하자면
생성과 파괴에서 생성과 비활성화로 구현한 것이죠~
스탠다드 방식의 한계
생성과 파괴 후 메모리 가비지가 쌓이고 메모리 한계에 도달하면 가비지 컬렉터가 작동한다.
가비지 컬렉터(GC)가 작동하면
메모리 섹션의 힙에 할당되어 있던 모든 오브젝트를 검사하고
레퍼런스가 없는(Unreachable) 오브젝트를
삭제하여 메모리를 확보한다.
이 때 스탠다드 방식의 한계가 발생한다.
가비지 컬렉터GC가 작동하는 동안에는 다른 작업들이 멈춘다는 것이다.
다른 작업들이 멈추는 시간이 길지는 않지만
그 짧은 시간에 GC 스파이크가 발생한다.

60fps를 유지하는데 필요한 16밀리초 제한을 초과하게되어
사람이 인지할만큼의 멈춤 현상(GC 스파이크)이 발생하는 것이다.

물론 유니티에는 점진적 GC 활성화 기능이 있어 위와 같이 어느정도 완화할 수 있지만
애초에 스파이크를 발생하지 않게 할 수 있다면?
오브젝트 풀링을 잘 활용한다면 가비지 컬렉터를 작동시키지 않을 수 있다.
그럼 이제 오브젝트 풀링을 구현해보자.
# 다음글에서 만나요
참고한 사이트 주소
A garbage collector for C and C++
A garbage collector for C and C++ [ This is an updated version of the page formerly at http://www.hpl.hp.com/personal/Hans_Boehm/gc, and before that at http://reality.sgi.com/boehm/gc.html and before that at ftp://parcftp.xerox.com/pub/gc/gc.html. ] The Bo
www.hboehm.info
https://docs.unity3d.com/kr/2021.3/Manual/performance-garbage-collector.html
가비지 컬렉터 개요 - Unity 매뉴얼
Unity에서는 가비지 컬렉터를 사용하여 애플리케이션과 Unity에서 더 이상 사용하지 않는 오브젝트로부터 메모리를 회수합니다. 스크립트가 관리되는 힙에 할당하려고 하지만 할당을 수용할 수
docs.unity3d.com
https://docs.unity3d.com/kr/2021.2/Manual/performance-incremental-garbage-collection.html
점진적 가비지 컬렉션 - Unity 매뉴얼
점진적 가비지 컬렉션(GC)은 가비지 컬렉션 프로세스를 여러 프레임에 분산시킵니다. 이는 Unity에서 가비지 컬렉션 동작의 기본값입니다.
docs.unity3d.com
https://docs.unity3d.com/kr/2021.3/Manual/performance-managed-memory.html#managed-heap
관리되는 메모리 - Unity 매뉴얼
Unity의 관리되는 메모리 시스템은 Mono 또는 IL2CPP 가상 머신(VM)기반의 C# 스크립팅 환경입니다. 관리되는 메모리 시스템의 이점은 메모리 해제를 관리하므로 코드를 통해 메모리 해제를 수동으로
docs.unity3d.com
'UNITY × 잡학지식' 카테고리의 다른 글
| 오큘러스(메타) 퀘스트 개발자 모드 비활성화 오류(안됨) 해결 방법 (0) | 2022.12.13 |
|---|---|
| 사이드 퀘스트 초간단? PC 설치 실행 방법 / 유니티 / SideQuest (0) | 2022.11.28 |