달력

72024  이전 다음

  • 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

메모리 풀(memory pool)


      • 고정 크기의 메모리를 할당 / 접근 / 헤제 하는 메모리 관리자



메모리를 할당 을 하게 되면 OS의 시스템 콜을 하는데 자주 콜을 하면 부하가 커 잦은 할당/ 헤제는 오버헤드를 일으킨다.

잦은 할당/헤제일수록 메모리 단편화가 일어나며 메모리가 여러 곳에 있기 때문에 처리하는 작업이 더 길어지게 된다.

이러한 문제점을 해결 하기 위해 메모리 풀이 필요합니다.


일반적으로 데이터를 할당하면 스택 메모리 영역에 할당이 되고 자동적으로 헤제가 되지만 너무 자주 일어나면 오버헤드가 되므로 new / malloc 연산자들을 이용하여 메모리에 동적할당을 해주게 됩니다.
힙에 저장된 메모리는 작성자가 직접 해제 시기를 지정할 수 있게 때문에 부하도 적고 더 용이한 관리가 가능하게 됩니다.


Posted by JakeGD
|

가비지 컬렉션(Garbage Collection)


    • 어떤 데이터를 동적으로 메모리에 할당하여 저장을 한 후 더 이상 필요하지 않을 시(즉 어떠한 변수도 해당 메모리 영역을 가르키지 않을때) 메모리를 재 사용하기 위해 해당 데이터가 저장된 메모를 탐지 하여 해제하는 기법.

    • 가비지 (Garbage)의 의미
      • 더 이상 사용하지 않는 메모리를 뜻함
    • 가비지 컬렉션(Garbage Collection)의 의미
      • 메모리를 재 사용하기 위해 가비지를 회수 하여 메모리 공간을 늘리는 것을 뜻함.

    • 장점
      • 자동적으로 사용하지 않는 메모리를 해제를 해줌.(메모리 누수에 걱정이 없다.)
    • 단점
      • 자동적으로 메모리를 해제 한다고 하나 그 시점이 정확 하지 않아. 실시간 시스템에 적합하지가 않다.
      • 헤제 작업에 비용이 들기 때문에 오버헤드가 된다.

    • 가비지 컬렉션 발생 시기
      • 메모리 영역이 충분하지 않은 상황에서 힙메모리 할당이 이루어 지면 가비지 컬렉터가 실행하며 사용하지 않은 메모리를 수거합니다.
      • 가비지 컬렉터는 가끔식 실행이 되지만 시점을 알기 어려우며 플렛폼마다 다르게 발생합니다.



가비지 컬렉터(Garbage Collector)

    • 가비지 컬렉션이 쓰레기를 수집하는 역할이라면 가비지 컬렉터는 쓰레기를 수집하는 수집기라고 보시면 됩니다.
    • 동적으로 할당된 메모리가 더이상 사용되지 않을때 가비지 컬렉터들이 탐색 -> 분리 -> 수집을 합니다.
    • 가비지 컬렉터 역시 CPU와 메모리 자원을 사용하기 때문에 메모리 할당을 자주하지 않는 편이 좋다.


코딩 작업시 가비지 컬렉션 최적화 방법.


1. 필요 이상 객체를 늘리지 않는다.

2. 객체 생성하고 삭제 하는 작업 보단 재활용 하는 수단을 찾기.

3. 복잡한 참조관계 줄이기. 관계가 복잡하면 가비지 컬렉션 이후 메모리가 살아 있을 수 있는 문제 발생.

Posted by JakeGD
|

재귀(Recursive) 함수


    • 자기자신의 안에서 자신을 호출하는 것
    • 탈출 조건 문이 필수적으로 있을것
    • 탈출 조건이 없으면 헤어나올수 없는 무한루프에 빠져버립니다.
    • 명확한 패턴의 조건이 아닌이상 함부로 사용하지 않기.
      • 예) 하노이탑, 1~100까지 순차적 더하기, 팩토리얼 등....

사용 예)


재귀 결과 값)




Posted by JakeGD
|