[compilation] JIT (Just-In-Time) 컴파일러의 기능은 무엇입니까?

JIT 컴파일러는 비 JIT 컴파일러와 달리 구체적으로 무엇을합니까? 누군가 간결하고 이해하기 쉬운 설명을 줄 수 있습니까?



답변

JIT 컴파일러는 프로그램이 시작된 실행 되고 코드 (보통 바이트 코드 또는 VM 종류의 명령어)를 즉석에서 또는 일반적으로 호스트 CPU의 기본 형식 인 빠른 형식으로 컴파일합니다 (일반적으로 바이트 코드 또는 VM 명령어) 명령어 세트. JIT는 동적 런타임 정보에 액세스 할 수있는 반면 표준 컴파일러는 자주 사용되는 인라인 함수와 같은 더 나은 최적화를 수행 할 수 없습니다.

이것은 프로그램을 처음 실행 하기 전에 모든 코드를 기계 언어로 컴파일하는 기존 컴파일러와 대조적 입니다 .

다시 말하면, 기존 컴파일러는 프로그램을 처음 실행하기 전에 전체 프로그램을 EXE 파일로 빌드합니다. 최신 스타일 프로그램의 경우 의사 코드 (p-code)로 어셈블리가 생성됩니다. OS에서 프로그램을 실행 한 후에 만 ​​(예를 들어, 아이콘을 두 번 클릭하여) (JIT) 컴파일러가 시작되어 인텔 기반 프로세서 또는 이해할 수있는 머신 코드 (m 코드)를 생성합니다.


답변

처음에 컴파일러는 고급 언어 (어셈블러보다 높은 수준으로 정의 됨)를 객체 코드 (기계 명령어)로 변환 한 다음 링커에 의해 실행 파일에 연결됩니다.

언어 진화의 한 시점에서, 컴파일러는 고급 언어를 의사 코드로 컴파일 한 다음 (통역사가 해석하여) 프로그램을 실행합니다. 따라서 객체 코드와 실행 파일이 제거되었으며 이러한 언어를 여러 운영 체제 및 하드웨어 플랫폼으로 이식 할 수있었습니다. 파스칼 (P-Code로 컴파일 된)은 첫 번째 중 하나였습니다. Java와 C #이 더 최근의 예입니다. 결국 P-Code라는 용어는 대부분의 의사 연산이 바이트 길이이므로 바이트 코드로 대체되었습니다.

JIT (Just-In-Time) 컴파일러는 런타임 인터프리터의 기능으로, 메소드가 호출 될 때마다 바이트 코드를 해석하는 대신 바이트 코드를 실행중인 머신의 머신 코드 명령어로 컴파일 한 다음이를 호출합니다. 대신 객체 코드. 이상적으로 객체 코드 실행의 효율성은 프로그램이 실행될 때마다 프로그램을 다시 컴파일하는 비 효율성을 극복합니다.


답변

JIT- 제때에 단어 자체가 필요할 때 (요청시) 말합니다

일반적인 시나리오 :

소스 코드는 기계 코드로 완전히 변환됩니다

JIT 시나리오 :

소스 코드는 구조와 같은 어셈블리 언어로 변환됩니다 (예 : C #의 경우 IL (중급 언어), java의 경우 ByteCode).

필요한 코드가 기계 코드로만 변환되어야하는 응용 프로그램이 필요한 경우에만 중간 코드가 기계 언어로 변환됩니다.

JIT와 비 JIT 비교 :

  • JIT에서 모든 코드가 기계 코드로 변환되는 것은 아닙니다. 필요한 코드의 일부가 기계 코드로 변환 된 다음 호출 된 메소드 또는 기능이 기계에없는 경우 기계 코드로 변환됩니다. CPU에 부담이됩니다.

  • 머신 코드가 런타임에 생성 될 때 JIT 컴파일러는 머신의 CPU 아키텍처 실행에 최적화 된 머신 코드를 생성합니다.

JIT 예 :

  1. Java JIT가 JVM (Java Virtual Machine)에 있음
  2. C #에서는 CLR (공용 언어 런타임)에 있습니다.
  3. Android에서는 최신 버전의 DVM (Dalvik Virtual Machine) 또는 ART (Android RunTime)에 있습니다.

답변

다른 언급했듯이

JIT는 JIT (Just-in-Time)의 약자로, 런타임이 아니라 필요할 때 코드가 컴파일됩니다.

위의 논의에 포인트를 추가하기 위해 JVM은 함수가 실행되는 횟수를 카운트합니다. 이 수가 사전 정의 된 한계를 초과하면 JIT가 코드를 기계 언어로 컴파일하여 프로세서가 직접 실행할 수있는 코드를 처리합니다 (일반적으로 javac가 코드를 바이트 코드로 컴파일 한 다음 java와는 달리)-인터프리터는이 바이트 코드를 한 줄씩 해석하여 기계 코드 및 실행).

또한 다음에이 함수가 계산 될 때 코드가 한 줄씩 다시 해석되는 일반적인 해석과 달리 동일한 컴파일 된 코드가 다시 실행됩니다. 이렇게하면 실행이 더 빨라집니다.


답변

JIT 컴파일러는 처음 실행될 때 바이트 코드를 동등한 기본 코드로 컴파일합니다. 모든 후속 실행에서 JVM은 성능을 최적화하기 위해 이미 컴파일 된 기본 코드 만 사용합니다.

여기에 이미지 설명을 입력하십시오

JIT 컴파일러가 없으면 JVM 인터프리터는 바이트 코드를 한 줄씩 변환하여 마치 원시 애플리케이션이 실행중인 것처럼 보이게합니다.

여기에 이미지 설명을 입력하십시오

출처


답변

JIT는 JIT (Just-in-Time)의 약자로, 런타임이 아니라 필요할 때 코드가 컴파일됩니다.

이것은 컴파일러가 특정 머신에 최적화 된 코드를 생성 할 수 있기 때문에 유리합니다. 일반적인 C 컴파일러와 같은 정적 컴파일러는 모든 코드를 개발자 컴퓨터의 실행 가능한 코드로 컴파일합니다. 따라서 컴파일러는 몇 가지 가정을 기반으로 최적화를 수행합니다. 사용자의 프로그램 실행 속도가 느려지지 않기 때문에 컴파일 속도가 느리고 최적화가 더 많이 수행 될 수 있습니다.


답변

Java 컴파일러가 바이트 코드 (아키텍처 중립적)를 생성 한 후에는 JVM (Java)이 실행을 처리합니다. 바이트 코드는 로더에 의해 JVM에로드 된 다음 각 바이트 명령이 해석됩니다.

메소드를 여러 번 호출해야하는 경우 동일한 코드를 여러 번 해석해야하며 필요한 것보다 시간이 더 걸릴 수 있습니다. 따라서 JIT (Just-In-Time) 컴파일러가 있습니다. 바이트가 JVM에로드되면 (실행 시간) 전체 코드가 해석되지 않고 컴파일되므로 시간이 절약됩니다.

JIT 컴파일러는 런타임 중에 만 작동하므로 바이너리 출력이 없습니다.