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 > Programming' 카테고리의 다른 글
(0) | 2015.07.22 |
---|---|
ASP.NET에서 MySQL 연결 (0) | 2015.07.16 |