[게임] Object pool & Garbage Collection

알감자·2022년 3월 26일
0

게임공부

목록 보기
4/22

1. Object Pool


출처 : https://medium.com/@sawomirkowalski/design-patterns-object-pool-e8269fd45e10

1) Object Pool 이란?

  • 게임에 필요한 오브젝트를 미리 생성해서 필요할 때마다 꺼내쓰고 사용이 끝나면 오브젝트 풀에 돌려주는 것

  • 게임에 필요한 오브젝트를 미리 생성해놓고, 모자라면 추가로 생성하여 쓰고 게임이 끝나면 파괴하는 방식

  • 재사용이 빈번한 총알, 이펙트 등을 object pool을 만들어 한번 쓰고 파괴하는 방식이 아니라 사용하고 나면 active false 해주었다가 다시 사용할 때 active true 해주어 재사용 하는 방식


2) Object Pool의 장점

  • 메모리를 신경 쓰지 않고 객체를 생성/파괴 할 수 있음

  • Object pool을 사용하지 않고 그냥 객체를 생성/파괴하면 Garbage Collector를 불러 성능을 저하시킨다. GC가 많이 불리는 것을 방지하고자 Object Pool을 사용하는 것.

-오브젝트 풀 클래스는 싱글톤이기 때문에 오브젝트 풀은 데이터베이스 연결이나 스레드 연결에서 특히 유용하다.즉, 여러 스레드에서 순식간에 액세스하지 않도록 보호된다.


3) Object Pool의 단점

  • 사용하지 않아도 미리 만들어 둔 pool 때문에 메모리를 차지하고 있는 셈이 된다.


2. Garbage Collection


출처 : https://ko.wikipedia.org/wiki/%EC%93%B0%EB%A0%88%EA%B8%B0_%EC%88%98%EC%A7%91_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)

1) Garbage Collection이란?

  • 쓰레기 수집(garbage collection, 가비지 컬렉션, GC)은 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다.

  • 자바, C#, 그리고 일부 스크립트 언어들은 처음부터 쓰레기 수집 기법을 염두에 두고 설계되어, 언어 정의에 쓰레기 수집이 포함되어 있다. C, C++ 등의 프로그래밍 언어는 수동 메모리 관리를 가정하고 설계되었으나, 쓰레기 수집을 지원하는 구현도 존재한다.


2) Garbage Collection의 장점

  • 유효하지 않은 포인터 접근: 이미 해제된 메모리에 접근하는 버그를 가리킨다. 만약 이 포인터가 해제되고 새로운 값이 할당되었다면, 잘못된 값을 읽어오게 된다.

  • 이중 해제: 이미 해제된 메모리를 또다시 해제하는 버그를 가리킨다. 일부 메모리 할당 알고리즘에서는, 해제된 메모리를 다시 해제하려고 시도하는 것은 오류를 일으킬 수 있다.

  • 메모리 누수: 더이상 필요하지 않은 메모리가 해제되지 않고 남아있는 버그를 가리킨다. 메모리 누수가 반복되면 메모리 고갈로 프로그램이 중단될 수 있다. (접근 가능한 메모리가 증가하여 메모리가 고갈되는 문제는 쓰레기 수집으로도 막을 수 없다)


3) Garbage Collection의 단점

  • 어떤 메모리를 해제할지 결정하는 데 비용이 든다. 객체가 필요없어지는 시점을 프로그래머가 미리 알고 있는 경우에도 쓰레기 수집 알고리즘이 메모리 해제 시점을 추적해야 하므로, 이 작업은 오버헤드가 된다.

  • 쓰레기 수집이 일어나는 타이밍이나 점유 시간을 미리 예측하기 어렵다. 때문에 프로그램이 예측 불가능하게 일시적으로 정지할 수 있다. 이런 특성은 특히 실시간 시스템에는 적합하지 않다.

  • 할당된 메모리가 해제되는 시점을 알 수 없다. 자원 할당과 변수 초기화를 일치하는 RAII(Resource Acquisition is Initialization) 스타일의 프로그래밍에서는, 이것은 자원 해제 시점을 알 수 없다는 것을 의미한다.

0개의 댓글