ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 가비지 컬렉션(Garbage Collection)
    Programing/C# 2008. 8. 13. 11:37

    .NET 프레임워크의 가비지 수집

    New 키워드를 사용하여 생성된 개체들은 managed 힙에 들어간다. 그러면 .NET은 이 개체에 필요한 메모리를 계산해서 힙에 빈 공간이 충분히 있는지 확인한다.

    만약 Managed힙 상에 메모리를 할당할 수 없다면 가비지 수집기가 실행되어 사용되지 않는 메모리들을 해제하게 된다.
    이 가비지 수집기는 다음과 같은 2가지 가정을 통해 행동을 하게 된다.

    1. 최근에 생성된 개체들일수록 수명이 짧을 것이다.
    2. 이미 오랫동안 존재해온 개체들은 앞으로도 한동안 살아있을 것이다.

    또한 .NET 프레임워크에는 총 삼대가 존재한다.
    0세대에서는 최근에 추가된 모든 메모리들을 저장한다.
    시간이 지나 힙이 가득차면 가비지 수집기가 실행돼서 활동 중인 모든 개체들을 1세대로 보내고, 0세대의 모든 메모리를 해제한다.
    만약 1세대또한 메모리가 꽉 차면 동일한 과정을 통해 활동중인 개체들은 2세대로 보내게 되고, 2세대마저 꽉 차게되면 값비싼 가비지 수집 연산이 일어나게 된다.

    어떠한 개체의 크기가 무척이나 커서 0,1세대에 들어가지 않게되면 곧바로 2세대로 보내게 된다는 것도 참고하자!

    따라서 개체를 생성하는 시기와 방법을 잘 생각해서 코딩을 하는것이 중요한데.. 매우 큰 개체들은 생성하지 않는 게 좋고 일단 생성된 개체들의 수명을 짧게 해서 1세대로 옮겨지지 않도록 하는 것이 좋다.
    결국은 크기도 크고, 수명도 긴 개체들을 줄이는 방법을 찾아야 한다.


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

    스트림(Stream)  (0) 2009.03.19
    스레드 사용하기  (0) 2009.03.19
    연결형 스트림 소켓과 비연결형 데이터그램 소켓  (0) 2009.03.18
    IPHostEntry 와 IPEndPoint  (0) 2009.03.18
    생성자에서의 this 와 base  (0) 2008.08.27
    이벤트(Object sender, EventArgs e)  (0) 2008.08.06
    예외(Exception)  (0) 2008.08.05
    컬렉션(Collection) 클래스  (0) 2008.08.05
    컬렉션(Collection) 인터페이스  (0) 2008.08.01
    델리게이트(delegate)  (0) 2008.07.23
Designed by Tistory.