Object Pooling

Object-Pooling을 사용하지 않고 Object를 생성, 파괴하면 생기는 문제

  1. Garbage Collecting 으로 인한 Frame Drop.
    1. 생성하고 파괴하는 것 : Heavy Work.
    2. Object 생성 : 메모리 새로 할당, 리소스 로드 등 초기화 과정이 필요하고, 파괴 이후에 발생하는 Garbage Collecing 으로 인한 FrameDrop이 발생한다.

    Destroy함수로 gameObject를 파괴한다고 선언하면 곧바로 메모리에서 사라지는 것이 아니다. Garbage Collector 가 그것을 수거해서 파괴하기 전까지 메모리에 남아있다.

  2. 메모리 파편화

Untitled

2-1. 64Byte의 A, B, C, D를 할당 받은 상태에서 A와 C를 할당 해제하면 3번과 같이 빈 공간이 생겨난다.

2-2. 이 때, 128Byte의 Object를 생성하려고 하면 A와 C자리에는 공간이 부족해서 D의 뒤에 있는 공간에 할당해야 한다.

2-3. 이 할당 이후에 128Byte 짜리 Object를 하나 더 생성하려고 하면 메모리의 빈 공간만 따졌을 때 128Byte의 공간이 존재하지만 연결된 크기가 128Byte인 공간이 없어서 Object 생성에 실패한다.

⇒ 메모리는 남아있는데 메모리가 부족한 역설적인 상황이 발생

Object-Pooling

개념 : Object를 담아둘 Object-Pool을 만들고, 여기에 빌려줄 Object를 생성해서 담아준 뒤, 외부에서 이 Object가 필요하면 Object Pool에서 빌려오고, 이 Object를 모두 사용하면 다시 Object Pool에 돌려주는 것.

만약, 외부에서 Object 풀 안에 있는 모든 Object를다 빌려갔다면?

새로운 Object를 생성해서 꺼내준다.

그리고 새로 만든 Object 역시 사용이 끝나서 돌려받으면 파괴하지 않고 Object Pool 이 보관하고 있으면 된다.

⇒ Window > Analysis > Profiler