C# 가비지 컬렉터

 

JAVA 프로그램이나 C#의 가장 큰 장점은 가비지 컬렉터 인듯 하다.

나는 C, C++ 프로그램을 해본적이 없어서 메모리에 대한 지식이 부족하지만

C#을 개발하면서 메모리에 대한 걱정은 하지 않고 마음 편히 개발 하였던거 같다.

   

가비지 컬렉터가 무엇일까?

- 가비지 컬렉터는 프로그램과 어떠한 연결 고리를 가지고 있지 않은 쓸모 없는 객체를 찾아서 메모리를 해제하는 것으로 간단히 정의 할 수 있다. 즉 쓸모 없는 메모리는 회수 하겠다 라는 것이다.

   

가비지 컬렉터는 언제 실행 될까?

가비지 컬렉터가 실행 되는 조건은 정해진 힙 메모리가 다 찻을때 실행 된다.

   

가비지 컬렉터가 정리되는 순서

- 객체의 수명에 따라 컬렉터를 실행 한다. 0세대 실행 후 메모리가 남아 있으면 다음 세대로 진행 하지 않는다. 오래된 객체의 경우 컬렉터에서 살아남을 확률이 높다. 다음과 같은 세대로 나눌 수 있다.

  • 0 세대 : 컬렉션 대상 표시가 된 적이 없는 새로 할당된 객체를 식별
  • 1세대 : 가비지 컬렉션 검색에서 살아 남은 객체를 식별(대상에 포함되지만 힙 메모리에 공간이 남아서 수거 되지 않은 객체)
  • 2세대 : 두 번 이상의 가비지 컬력션에서 살아 남는 객체.

강제로 가비지 컬렉터를 회수 하는 방법

- GC.Collect() 함수를 사용

세대별로 조사하고 싶을때는 GC.Collect(0), GC.Collect(1), GC.Collect(2) 이렇게 인자를 넣어서 사용

   

강제로 가비지 컬렉터를 하면 좋지 않을까?

- 가비지 컬렉터는 언제 실행 될지 모른다. 그래서 사용자가 강제로 실행하면 좋지 않을까? 물론 상황에 따라 좋을 수도 있다. 하지만 객체 회수시 호출할때마다 살아 남은 0세대 객체들은 1세대로 , 1세대 객체는 2세대로 바뀌게 되므로 자주 가비지 컬렉터가 호출 될경우 2세대의 객체가 넘쳐나 수거해 가는데 오랜 시간이 걸린다.

'SW Engineering > C Sharp' 카테고리의 다른 글

C# 가비지 컬렉터  (0) 2015.07.22
  (0) 2015.07.22

+ Recent posts