백구의 코딩찌개
  • [C#] 가비지 콜렉터란?
    2024년 01월 20일 16시 37분 14초에 업로드 된 글입니다.
    작성자: 코딩백구
    반응형

    앞선 글에서 가비지 콜렉터에 대한 언급이 있어서 여기에서 간단하게 한번 짚고 넘어가도록 하겠다.

     

    가비지 콜렉터란?

    • 가비지 콜렉터란 메모리를 관리하기 위한 존재이다. C 나 C++에서는 객체를 위해 메모리 공간을 확보하고, 객체를 할당한 후에 해당 객체의 작업이 종료되면 할당했던 메모리의 heap 을 가리키는 포인터를 통해 메모리를 해제하는 작업을 직접 구현해주어야한다. 하지만 이 과정이 복잡하고, 실수를 자주 발생 시키기에 메모리 할당 및 해제를 알아서 처리해주는 가비지 콜렉터 가 등장하였다.
    • C# 의 특성상 힙에 할당된 메모리는 가비지 콜렉터 가 사용하지 않는 메모리들을 정리해주는데, 이때 처리해야할 양이 많으면 프로그램 동작속도가 느려지거나 아예 멈추기도한다. (스택은 사용 후 종료된다.)

    가비지 콜렉터의 세대 별 관리

    • 가비지 콜렉터 에서는 0세대, 1세대, 2세대로 메모리를 관리한다. 처음 생성되어 메모리에 할당되는 친구들을 0세대에 두고 사용하는지 검증하고, 사용하지 않다면 해제 해버린다. 하지만 여기서 계속 사용되는게 있다면 1세대로, 거기서도 계속 사용되면 2세대로 넘겨서 관리를 하는 방식이다. 이때, 다음 세대로 넘어갈수록 관리를 하느 빈도가 줄어든다. 오래 살아남은 개체일수록 해제하지 않아도 되고, 중요한 개체일 가능성이 높아지기 때문.
    • 가비지 콜렉터 는 세대별로 호출되어지는게 아니고 해당 세대가 호출되면 이전 세대들도 호출된다. 즉, 2세대의 경우는 전체 가비지 콜렉터 를 호출한다고 볼 수 있다.

    가비지 콜렉터의 장단점

    • 👍 포인터에 대한 이해가 없어도 괜찮다.
    • 👍 메모리 할당, 해제에 관해 실수가 적다.
    • 👎 GC가 동작 시에는 다른 작업들이 멈춘다.
    • 👎 메모리 관리를 직접 할 수 없어 메모리를 더 효율적으로 관리하기는 힘들다.

    반응형

    'Language > C#' 카테고리의 다른 글

    [C#] C# foreach 반복문에서 index 값 가져오기  (0) 2024.01.23
    [C#] 배열 Slice 하는 방법  (0) 2024.01.23
    [C#] C#의 기본 구조  (0) 2024.01.22
    [C#] C# 과 .NET  (0) 2024.01.20
    댓글