티스토리 뷰

메모리 풀링 (Memory pooling)

풀링이라는 단어 자체를 외우는 편이 좋다.

 

풀링은 특정 목적의 객체를 미리 특정 크기 혹은 갯수만큼 미리 생성/할당하고 필요에 따라 사용할 수 있도록 제공하고 사용이 끝나면 회수하여 다시 사용할 수 있도록 대비하는 것이다. (사용과 회수 과정에서는 필요에 따라 초기화 단계가 추가될 수 있다.)

 

대표적인 예로는 게임을 제작에 최적화를 위해 자주 사용되는 오브젝트 풀링 기법이나 게임 서버에서 자주 사용되는 IOCP가 있다.

 

 


목적

메모리 할당 및 해제많은 비용이 발생한다. 이는 메모리 단편화(fragmentation) 현상을 초래하여 성능저하에 큰 원인이 되기에 이러한 과정을 최소화할 수 있는 풀링 기법들이 다양한 부분에서 만들어졌다.

 

메모리풀링 기법들은 미리 만들어진 객체를 사용하기에 이러한 단편화 현상을 방지할 수 있다.

 

📌 메모리 단편화 (fragmentation)
메모리 관리에 발생하는 현상으로, 사용 가능한 메모리 공간이 작은 조각으로 나뉘어져 있어 프로세스나 데이터 구조를 할당하거나 해제하는 것에 어려움을 겪는 상황을 말한다.

외부 단편화와 내부 단편화 형태가 존재하며, 외부 단편화는 사용 가능한 메모리 공간이 여러 조각이 나있어, 필요한 메모리 요청이 충족되지 못할 경우이고 내부 단편화할당된 공간이 요구되는 사항보다 더욱 큰 경우이다.

 

 


단점

메모리 풀링의 단점은 명확하다. 어느 정도의 객체를 미리 만들어 놔야하는지 평균적인 추산이 가능해야 한다.

메모리 풀링 자체가 미리 메모리에 일정 크기의 객체를 할당하는 것이기에 사용되지 않는다면 메모리 누수가 일어날 수 있다.

 

만약, 작업 요청 수가 풀링된 객체보다 많다면 추가적인 객체를 할당하거나 다른 요청을 처리하기에 대기하는 시간이 필요하다. 반대로 작업 요청 수가 너무나 적다면 사용하지 않는 풀링 객체들이 메모리를 계속 남아있어서 문제가 된다.

 

하여 메모리 풀링은 메모리 할당/해제가 잦은 경우, 어느정도 적당한 크기의 객체를 만들어 사용하는 것이 효과적이다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함