본문 바로가기

Language/C#

CLR / CLI / JIT / AOT

JIT(Just In Time)컴파일, Dynamic translation(동적번역), 달빅에서 사용하는 방식  


프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일기법

프로그램의 실행 속도를 빠르게 하기위해 사용하며 실행시점에서 interpreter 방식으로 기계어 코드를 생성하면서 그 코드를 Caching하여

같은함수가 여러번 호출될때 매번 기계어 코드를 생성하는것을 방지해 준다.



JIT 단점 


초기 구동시에는 Source code를 runtime에서 Compile하는데 시간과 Memory를 소모하기떄문에 

정적 컴파일된 프로그램에 비해 실행속도면에서 손해를 본다.

특히 실행시간이 매우 짧은 경우에는 컴파일된 코드를 제대로 사용하기도 전에 프로그램이 끝나는 상황이 벌어지기도 한다.



AOT(Ahead Of Time)컴파일, ART에서 사용하는 방식


설치 시점에 source code를 기계어로 번역한다.

실행시점에 미리 번역한 파일을 실행하므로 빠르게 실행이 가능하다.



AOT 단점

설치속도가 느리고 번역을 따로 해서 파일을 저장하기 때문에 용량을 많이소모한다.




CLI(Common Language Infrastructure, 공통 중간언어) 


.NET Framework에서 인간이 이해할 수 있는 가장 낮은 수준의 프로그래밍 언어,

.NET Framework를 대상으로 하는 Language들은 Bite Code로 변환되는 CLI로 compile된다.

O.O.P Assembly Language 이며 완전한 스택기반이고 VM(CLR)을 통해 실행된다.



CLR(Common Language Runtime, 공통 언어 런타임)  


지원되는 Language중 어떤 하나로 작성된 프로그램이 공통의 객체지향형 class를 공유할 수 있도록 해주는 실행관리 프로그램





Java에서는 .java파일이 .class 파일로 변환되고 이것이 JVM에 로딩되어 실행되는 구조이며

그다음 JVM에서는 자바 bite code를 하나씩 해당 OS의 기계어로 번역을 하는것이다.



C#에서는 .cs파일을 compile하면 .exe나 dll(CLI, 중간언어)로 변환되고 이것이 CLR에 있는 JIT Compiler에 의해 해당 OS의

Native Code(Binary Code)로 번역하여 Cache에 저장 되는 구조이다.



C# Source Code -> CLI Code -> Native Code



-1줄요약

CLR : C#에서 사용하는 VM(Virtual Machine), JAVA의 JVM과 비슷한 역활을 하며 CLI코드를 읽어 OS가 이해할 수 있는 Native Code로 변환해준다.

CLI : .NET FrameWork로 개발된 프로그램코드는 CLI를 실행하며 CLI는 bite code형태로 구성되어있다.





참조

https://guslabview.tistory.com/185


https://diehard98.tistory.com/entry/Managed-%EC%BD%94%EB%93%9C-Unmanaged-%EC%BD%94%EB%93%9C-%EA%B7%B8%EB%A6%AC%EA%B3%A0-Native-%EC%BD%94%EB%93%9C%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%EC%95%BC%EA%B8%B0

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

Dictionary  (0) 2019.02.27
ref, out, Tryparse Keyword  (0) 2019.02.26
is, as Keyworkd  (0) 2019.02.26
C#에서의 Get / Set  (0) 2019.02.25
GC / SGen  (0) 2019.02.25