CLR

    .NET 환경의 컴파일 과정 - CLR, CIL, JIT, AOT

    예전의 C, C++의 경우 개별 환경이 프로그램의 실행 시간에 영향을 미치는 문제가 있었지만 Java가 나오면서 컴파일된 바이트코드는 윈도우, 리눅스, 그 어떤 실행환경이든 JVM만 실행 가능하다면 실행할 수 있다는 장점을 통해 인기를 끌었고, 마이크로소프트는 이를 이용해 기존 문제를 해결할 수 있도록 .NET 환경에 가상 머신을 만들어서 .NET 환경의 언어로 개발된 IL(Intermediate Language, 중간 언어) 코드들은 .NET Framework가 설치된 어떠한 환경에서도 실행할 수 있도록 하였다. 대표적인 예시로 VB .NET, C#이 있다. CLR(Common Language Runtime, 공통 언어 런타임)은 이 가상머신의 구성요소 중 하나이며, CIL(Common Intermid..

    C# 가비지 컬렉터 (Garbage Collector / GC)

    GC가 작동하는 시기 객체를 할당하여 할당하는 임계치가 넘어갈 때 (각 세대 별) 시스템의 메모리가 부족할 때 GC.Collect 메서드를 호출할 때 GC Root 루트는 힙에 있는 최상위 객체를 가리키는 참조를 말한다 스택이나 힙(static)에 생성된다. .NET 어플레이케이션을 실행하면, JIT 컴파일러가 루트 목록을 생성하고 CLR이 루트 목록을 돌면서 상태를 갱시하는 것이다. (GC가 참조함) 가비지 컬렉터는 루트 목록을 순회하면서 루트가 참조하는 힙 객체와 관계를 조사한다. 어떤 힙과도 루트와 관계가 없다면 필요 없는 Garbage 다른 힙 객체를 참조한다면 Not Garbage 쓰레기 객체가 있던 메모리는 비워줘야 한다.(Sweap) 이 때문에 이러한 방법의 특징은 Heap 전체를 검사할 필..