[C#] 스택과 힙, 가비지 컬렉터

한승호·2022년 8월 17일

C# 공부

목록 보기
12/13

스택

  • 프로그램을 실행하는데 필요한 메모리 공간으로 값 형식이 저장되는 곳이다.
  • 스택 영역은 후입선출의 방식으로 가장 나중에 저장된 값을 가장 먼저 반환한다.
  • 메소드가 끝나는 순간 메모리에서 삭제해준다.
  • 값 형식이 저장된다.

  • 동적할당으로 생성된 메모리가 저장된다.
  • 클래스는 내부적으로 new 키워드를 통해 저장되며, 이는 힙 영역에 저장된다.
  • 힙 영역에는 생성된 데이터의 값이 들어가 있다.
  • 스택 영역에는 힙 영역에 존재하는 메모리 주소가 들어간다.
  • 오브젝트를 선언할 때 해당 오브젝트는 힙에 할당되며, 이 오브젝트를 가리키는 주소 값이 스택에 저장되는 것이다.

가비지 컬렉터

  • 스택에서는 후입선출 방식으로 메모리를 관리하지만, 힙 영역은 가비지 컬렉터라는 것이 자동으로 관리를 해준다.
  1. 힙 영역에 있는 메모리의 주소는 스택에 저장되어 있지만, 스택에 주소가 저장되어 있지 않다면, 값을 찾을 수 없다.
  2. 그래서 C#에서는 가비지 컬렉터가 존재하며, 주소가 삭제되어 더이상 접근이 불가능해진 힙 영역의 메모리를 알아서 삭제시킨다.
    그러나 삭제 시점이 언제인지 알 수 없다. 그래서 개발자가 예측할 수 없는 시점에 돌아 성능에 영향을 주기 때문에 자주 발생하지 않도록 하는게 좋다고 한다.
  • 그래서 객체를 너무 많이 할당하거나 큰 객체는 할당을 최소화하는게 좋다. 그래서 프로젝트를 진행할 때 오브젝트 풀링으로 관리했었다.

가비지 컬렉터 동작방식

  • 가비지 컬렉터는 세대별 가비지 수집 방식으로 동장한다.
  • 메모리를 0, 1, 2의 3개의 세대로 나누어서 가비지로 분류가 된 것을을 축적하다가 임계치가 넘어가면 삭제 및 정렬을 실행한다.
profile
모든 실수를 경험해 더 발전하고 싶은 개발자입니다.

0개의 댓글