일정 loop 에 대한 시간을 측정 한다고했을 경우 JIT 컴파일은 


첫 실행에서만 효과를 누릴 수 있는 만큼 평균치에선 효과가 드러나지 않는다




JIT 컴파일(just-in-time compile) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다. 이 기법은 프로그램의 실행 속도를 빠르게 하기 위해 사용된다.

전통적인 입장에서 컴퓨터 프로그램을 만드는 방법은 두가지가 있는데, 인터프리트 방식과 정적 컴파일 방식으로 나눌 수 있다. 이 중 인터프리트 방식은 실행 중 프로그래밍 언어를 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행하며, 반면 정적 컴파일은 실행하기 전에 프로그램 코드를 기계어로 번역한다.

JIT 컴파일러는 두 가지의 방식을 혼합한 방식으로 생각할 수 있는데, 실행 시점에서 기계어 코드를 생성하면서 그 코드를 캐싱하여, 같은 함수가 여러 번 불릴 때 매번 기계어 코드를 생성하는 것을 방지한다.

최근의 자바 가상 머신에서는 JIT 컴파일을 지원한다. 즉, 자바 컴파일러가 자바 프로그램 코드를 바이트코드로 변환한 다음, 실제 바이트코드를 실행하는 시점에서 가상 머신이 바이트코드를 기계어로 변환한다.


http://linuxism.tistory.com/258




좀 더 Jit 에 대한 자세한 설명




1. 닷넷의 이해, 컴파일과 실행

 

1.1 닷넷 (.NET)

1.1.1 C#이란

▣ Visual Basic

​  ◈ 프로그램을 쉽고 빠르게 할 수 있었다.

​  ◈ 문제점

    - 완벽한 객체지향을 지원해주지 않았다.

    - 다른 언어와의 호환성 지원이 미흡했다.

​▣ C#의 가장 큰 이슈

  ​◈ 더 쉽고 빠르게 프로그램하는 것이다.

​  ◈ C#에서 할 수 없는 것을 완벽하게 지원해주자는 것이다.

​​▣ C#의 파워

  ​◈ 2줄이면 C언어로 만들어진 함수 라이브러리를 사용할 수 있다.

​▣ 변화​

  ​◈ 많은 개발자들이 C#을 이해하지 못하고 있었기에 C#에 대한 혼돈 상태에 있었다.

  ◈ C#을 이해하기 시작하면서 C#은 MS의 대체 언어가 되고 있으며, 개발자의 주 개발 언어가 되고 있다.

1.1.2 닷넷의 의미와 특징

​▣ 닷넷이란(프로그래머 입장)

  ◈ 모든 것을 포괄하고 있는 이상적인 개발환경

▣ 이상적인 개발환경

  ◈ 닷넷은 개발에 필요한 개발 언어, 개발 툴, 라이브러리, 기반 기술 등을 제공하는 이상적인 개발환경이다.​

​​▣ 개발환경의 통일

  ◈ 개발자는 닷넷 환경하에서 다양한 언어로 개발

▣ 실행환경의 통일

  ◈ 다양한 언어로 개발된 프로그램을 하나의 방식으로 번역한 후 닷넷에서 하나의 방식으로 동작

▣ C#​​

  ◈ 닷넷을 대표하는 언어

1.1.3 닷넷 프레임웍(.NET Framework)

1.1.4 닷넷의 특징

▣ 플랫폼 독립성(Platform Independent)

  ◈ 닷넷 프레임웍만 설치되어 있다면 어떠한 운영체제에서도 닷넷 애플리케이션이 동작할 수 있다.

▣ 다양한 언어의 지원

  ◈ 개발자는 다양한 언어로 개발, 닷넷에서 하나의 방식으로 동작

  ◈ CLS(Common Language Specification)

    - 닷넷 프레임웍에서 동작하기 위해서 언어들이 지켜야 하는 표준 스펙

▣ 상호 운용성(Interoperability)

  ◈ 서로 다른 언어끼리의 호환성

    - C#에서의 COM 사용

    - C#에서의 Win32 API 사용

  ◈ 닷넷 지원 언어들끼리의 호환성

1.2 ​닷넷 언어의 핵심

​1.2.1 중간언어

1.2.2 동적 컴파일러

​▣ 중간언어(Intermediate Language)

  ◈ 기계어로 변환하기 쉬운 상태의 중간 단계의 언어

  ◈ 닷넷에서 번역되고 실행되기 위해서는 중간언어 형태로 컴파일되어야 한다. 

▣ 중간언어의 단점

  ◈ 완전한 기계어가 아니기 때문에 언젠가는 완전한 기계어로 번역해야 한다.

  ◈ 속도가 느리다.​

▣ 중간언어의 장점

  ◈ 중간언어를 기계어로 번역하는 번역기만 제공된다면 어떠한 플랫폼에서도 실행 가능하다.​

▣ 중간언어와 동적 컴파일​​​ 

  ◈ 중간언어

     - C#의 최종 결과물(컴파일한 결과파일)

  ◈ 재컴파일

     - 중간언어는 완벽한 기계어로 컴파일되어야만 실행될 수 있다.

  ◈ JIT(Just In Time Compiler)

     - 중간언어를 동적으로 컴파일하는 컴파일러


1.2.3 CLR







1.2.4 컴파일과 실행

​▣ 닷넷의 컴파일과 실행

  ◈ 컴파일

    - 중간언어(IL) 형태로 만든다.

  ◈ 실행

    - .NET 환경의 CLR은 IL형태의 언어를 JIT가 재컴파일한 후 시행시킨다.

​▣ C#의 어셈블리

  ◈ 중간언어 형태의 .exe나 .dll파일들을 C#에서는 어셈블리(Assembly)라고 한다.

​▣ 어셈블리의 종류 ​

  ◈ 사설 어셈블리

    - Copy & Paste 개념의 프로그램

    - 복사해서 사용하면 된다.

  ◈ 공용 어셈블리

    - 레지스터 개념에서 발전된 형태

    - 공용 어셈블리를 등록하는 것은 레지스터와 동일하다.

    - 버전별로 독립적으로 관리하며 복사버젼을 보관한다.

    - CLSID 대신 디지털 서명 방식으로 관리한다.   ​

1.3 .NET과 언어​

1.3.1 .NET과 C#

▣ .NET과 C#의 호환

  ◈ .NET을 위해서 새롭게 만들어진 언어

  ◈ .NET의 특징은 곧 C#의 특징이다.

▣ C#언어의 특징

  ◈ 기존 언어들의 장점만을 살려서 만든 언어

  ◈ C#은 C++의 문법을 표준화하고 정리하고 발전시킨 언어이다.

  ◈ C#에서 C문법을 사용할 수 있다. (포인터)

  ◈ C#에서 기존의 COM 컴포넌트를 사용할 수 있다.

▣ C#의 라이브러리​

  ◈ XML.NET

  ◈ ADO.NET

  ◈ ASP.NET

  ◈ XML Web Services

​1.3.2 C#과 자바



[출처] [C#] 1.닷넷의 이해, 컴파일과 실행


반응형

+ Recent posts