using System;
// 1.언제 수집되는가 ? Context스위칭시간 10ms정도를 가비지시스템이 작동한다.
// 메모리를 일단 다 쓰게 한후에 어느정도 다 찼을 때 메모리를 비워준다.
// ( 메모리의 이동을 줄인다. )
// 2.세대 개념 0, 1, 2세대(관리 힙)로 차례대로 진행된다.
// 3.소멸자 호출
// C#과 Java는 소멸자를 만들지 않는다.
// 대신 IDisposable 인터페이스를 구현해라.
// WINDOW API를 가져다 쓸 때 HANDLE 같은것을 해제 시켜 줄 때만 소멸자의 역할을 만든다.
class Point
{
    public int x;
    public Point()
    {
        Console.WriteLine("Point.Point()");
    }
    public void Dispose()
    {
        Console.WriteLine("여기서 소멸자의 역할을 하게 해라.");
    }
    // c#도 소멸자를 만들 수 있다.( finalize라고 부른다. )
    // 하지만 정확히 언제 호출 될지를 알 수 없다.
    //~Point()
    //{
    //    Console.WriteLine("Point.~Point()");
    //}
}
class Test
{
    public static void Main()
    {
        {
            Point p1 = new Point();
            p1.Dispose();   // 소멸 작업이 필요한 경우..호출
        }
        //GC.Collect(0);   // 강제로 가비지 Collection을 한다.
        //GC.Collect(0);
        //Console.WriteLine("{0}", GC.CollectionCount(0));
        Console.WriteLine("AAA");
    }
}
