문제

무엇 JIT 컴파일러 특히오 반대로 비 JIT 컴파일러가?할 수 있는 누군가가 제공하는 간단하고 이해하기 쉽게 설명?

도움이 되었습니까?

해결책

JIT 컴파일러가 실행 후에 프로그램을 시작했고서 코드를 컴파일(보통 바이트코드 또는 어떤 종류의 VM 지침)즉석에서(또는 just-in-time,그것으로 불렀)는 형식으로 일반적으로 더 빠르게,일반적으로 호스트 CPU 의 기본 명령어 집합입니다.JIT 액세스할 수 있는 동적 런타임이 정보를 반면이 표준 컴파일러하지 않고 만들 수 있는 더 나은 최적화 같은 인라이닝 기능이 있는 자주 사용됩니다.

이에 대비하는 전통적인 컴파일러를 컴파일 모든 코드 기계 언어 프로그램은 처음 실행됩니다.

의역,기존의 컴파일러 구축하는 전체 프로그램으로 EXE 파일을하기 전에 처음 시간 당신은 그것을 실행합니다.에 대한 새로운 스타일을 프로그램 어셈블리가 생성되는 의사(p-코드).만한 후 실행하는 프로그램에서는 OS(예를 들어,더블 클릭하면 해당 아이콘)것(JIT)컴파일러에서 생성 컴퓨터 코드(m-코드)는 인텔 프로세서 기반으로 또 어떤 이해하는 것입니다.

다른 팁

처음에는 컴파일러에 대한 책임을 돌 높은 수준의 언어(으로 정의보다 높은 수준 assembler)로 개체 코드(기계 지침),는 다음 링크(으로 linker)으로 실행이 가능합니다.

한 지점에서의 진화에 있어,컴파일러를 컴파일한 높은 수준 언어로 의사 코드는데,그렇다면 해석(에 의해 통역)프로그램을 실행합니다.이 삭제되는 개체 코드와 실행을 허용한 언어를 휴대하는 여러 운영 체제와 하드웨어 플랫폼입니다.파스칼(는 컴파일 P-코드)는 하나의 처음;Java,C#더 많은 최근의 예입니다.결국 P 코드로 대체되었 바이트 코드,대부분의 의사 작업은 바이트다.

Just-In-Time(JIT)컴파일러의 기능을 실행 시간 통역하는 대신 해석의 바이트 코드는 모든 시간은 메소드가 호출되는 것,컴파일한 바이트 코드로 컴퓨터 코드의 실행하는 기계,그리고 그 다음 호출이 개체 코드 대신 합니다.최상의 효율성을 실행하는 개체 코드를 극복의 비효율성 프로그램을 다시 컴파일하든 그것을 실행합니다.

JIT 단에서 시간 말씀자체를 말하고 필요할 경우(on demand)

일반적인 시나리오:

소스 코드를 완전히 변환기 코드

JIT 시나리오:

소스 코드로 변환됩니다 어셈블리 언어 같은 구조[ex IL(중간 언어)에는 C#,java ByteCode].

중간 코드 변환기 언어는 경우에만 응용 프로그램을 필요로 하는 데 필요한 코드 변환기 코드입니다.

JIT vs Non-JIT 비교

  • JIT 하지 않는 모든 코드로 변환 컴퓨터 코드 첫 번째 부분 의 코드를 필요로 변환됩니다 컴퓨터 코드 는 경우 다음 방법 또는 기능을 호출하지 않은 기계에서 다음 이 될 컴퓨터 코드...그것을 감소에 대한 부담합니다.

  • 으로 컴퓨터 코드를 생성됩니다 실행 시간.......JIT 컴파일러에서 생산하는 기계는 코드 최적화를 위한 실행 템의 CPU 공합니다.

JIT 예제:

  1. Java JIT 에서 JVM(Java 가상 머신)
  2. C#에 CLR(Common Language 런타임)
  3. 안드로이드에 그것은 놀라(Dalvik Virtual Machine),또는 미술관(안드로이드 런타임)에서 최신 버전이 있습니다.

로 다른 언급한

JIT 의미 Just-in-Time 것을 의미하는 코드를 컴파일 할 때 그것은 필요하지 않기 전에 runtime.

그 점을 추가하여 위의 논의 JVM 계수를 유지보로 얼마나 많은 시간이 기능이 실행됩니다.이 계산을 초과하면 미리 정의된 제한 JIT 의 코드를 컴파일합으로 기계의 언어는 직접에 의해 실행되는 프로세서(는 일반적인 경우에는 javac 코드를 컴파일로 바이트코드와 다음 java-인터프리터를 해석이 바이트코드 라인 라인에 의해 변환 기계로 코드와 실행).

또한 다음에 이 기능이 계산되는 같은 컴파일 된 코드가 실행되는 다시 정상과는 달리 해석하는 코드는 해석을 다시 라인에 의해 라인입니다.이것은 실행이 더 빠르다.

JIT 만 컴파일러를 컴파일한 바이트 코드를 동등한 기본 코드에서 처음 실행합니다.따라 연속적인 모든 실행,JVM 단순히 사용하는 이미 기본 코드를 컴파일하여 성능을 최적화합니다.

enter image description here

없이 JIT 컴파일러,JVM 번역 바이트 코드의 라인을 만들로 나타나는 경우 기본 응용 프로그램이 실행되고 있습니다.

enter image description here

JIT 의미 Just-in-Time 것을 의미하는 코드를 컴파일 할 때 그것은 필요하지 않기 전에 runtime.

이 유리하기 때문에 컴파일러에서 생성할 수 있는 코드는 최적화되어 있습니다 당신의 특별한 기계입니다.정 컴파일러,다음과 같이 평균 C 컴파일러를 컴파일하고 모든 코드를 실행 코드 개발자의 컴퓨터에서.따라서 컴파일러 최적화를 수행을 기반으로 모델 예측제어 등을 다룬다.그것을 컴파일할 수 있습니다 더욱 천천히 하고 더 많은 최적화되지 않기 때문에 둔화 프로그램 실행을 위해 사용됩니다.

후에 바이트 코드(있는 건물 중립적)생성되었는지 Java compiler,실행에 의해 처리됩니다 JVM(Java).바이트 코드는 것이 로드에서 JVM 로더에서 다음 각각의 바이트 명령은 해석됩니다.

가 필요로 할 때 우리는 전화하는 방법을 여러 번,우리가 필요한 해석과 동일한 코드는 많은 시간이 걸릴 수 있습보다 더 많은 시간이 필요합니다.그래서 우리는 JIT(just-in-time)컴파일러입니다.을 때 바이트되었습드에서 JVM(의 실행 시간),전체 코드를 컴파일하기보다는 해석되고,따라서 시간을 절약하고 있습니다.

JIT 컴파일러에서 작동하는 동안에만 실행 시간,그래서 우리가 어떤 이진 출력됩니다.

그냥 시간에 컴파일러(JIT):
컴파일 java 바이트 기계로 지시의 특정 CPU.

는 경우,예를 들어,우리는 루프가 있는 성명에서 우리의 자바 코드:

while(i<10){
    // ...
    a=a+i;
    // ...
 }

위 루프 코드를 실행에 대한 10 시간 경우 의 값은 0 입니다.

그것은 컴파일할 필요는 없습의 바이트 코드에 대한 10 시간으로 또 다시 동일한 명령을 실행에 대한 10 시간에.는 경우,그것은 컴파일할 필요는 코드만 일단 값이 변경 될 수 있습을 위해 필요한 횟수입니다.그래서,Just In Time(JIT)컴파일러를 추적의 이러한 진술 및 방법(위에서 말했듯하기 전에)와 컴파일러한 조각의 바이트 코드를 컴퓨터 코드에 대한 더 나은 성능을 제공합니다.

또 다른 유사한 예로,이 검색에 대한 패턴을 사용하여"일반적인"표현의 목록에서 문자열/문장입니다.

JIT 컴파일하지 않는 모든 코드를 컴파일하는 컴퓨터 코드.그것은 코드를 컴파일하는 비슷한 패턴에는 실행 시간입니다.

오라클 문서를 이해하 JIT 를 더 읽어 보시기 바랍니다.

코드가 있는 compliled 으로 일부 IL(intermediate language).프로그램을 실행하면,컴퓨터를 이해하지 못하는 이 코드입니다.그것만 이해하고 기본 코드입니다.그래서 JIT 컴파일러를 컴파일하고 IL 으로 원시 코드입니다.그것은 이 방법은 수준입니다.

내가 이것을 알고 있는 오래된 스레드지만,런타임 최적화의 또 다른 중요한 부분입니다 JIT 컴파일하지 않는 것 같았는 여기서 설명합니다.기본적으로,JIT 컴파일러를 모니터링 프로그램 실행을 결정을 개선하는 방법이 실행됩니다.그런 다음,그것은 만들 수 있습니다 그 변경에 있습니다.Google JIT 최적화(javaworld 꽤 에 대한 좋은 기사니다.)

Jit 서을 위한 시간에 컴파일러 jit 가 프로그램 java 바이트 코드로 명령할 수 있는 전송을 직접 프로세서입니다.

를 사용하 java 시간에 컴파일러(정말 두 번째는 컴파일러)에서 특정 시스템 플랫폼을 준수하는 바이트 코드로 특정 시스템 코드,후에 코드를 다시 컴파일해 jit 컴파일러,그것은 일반적으로 더 빠르게 실행에서 컴퓨터입니다.

Just-in-time 컴파일러와 함께 온 가상 기계고 사용 할 수 있습니다.컴파일 바이트 코드로 플랫폼-특정 실행 코드는 즉시 실행됩니다.

그냥 시간에 컴파일러(JIT)소프트웨어는 받는 비행 입력하고 반환합니다 적절한 기계 코드를 실행할 수 있습니다.예를 들어:

Intermediate representation    JIT    Native machine code for the current CPU architecture

     Java bytecode            --->        machine code
     Javascript (run with V8) --->        machine code

이 결과는 특정 CPU 아키텍처 적절한 JIT 컴파일러가 설치되어 있어야 합니다.

차이 컴파일러,통역사,그리고 JIT

지만 예외가 될 수 있습에서 일할 때 우리는 원하는 변환하는 소스 코드를 컴퓨터 코드 우리가 사용할 수 있습니다:

  1. 컴파일러:소스 코드를 반환하는 실행
  2. 통역:프로그램을 실행 명령 명령에 의해.그것은 실행 파일의 세그먼트 소스 코드고는 세그먼트로 기계 지침.이 프로세스가 반복될 때까지 모든 소스 코드로 변환 기계 지침과 실행됩니다.
  3. JIT:많은 다른 구현 JIT 가 가능하며,그러나 JIT 은 일반적으로 조합의 compliler 및 통역입니다.JIT 첫 번째 차례 중간 데이터(예를 들어,Java bytecode)를 받으로 기계를 통해 언어 해석된다.JIT 수 있으면 감각을 특정 부분의 코드를 실행하는 경우 컴파일하고 이 부분에 대한 빠르게 실행됩니다.

비 JIT 컴파일러 소스 코드 및 변환기는 특정 바이트 코드를 컴파일때 정해진다.JIT 컴파일러의 기계 불가지론 바이트 코드의 생성에서 컴파일한 시간으로 기계의 특정 바이트 코드를 수행할 필요는 없습니다.JIT 컴파일러는 자바를 사용할 수 있도록 하나의 바이너리에서 실행하는 다양한 플랫폼없이 수정할 수 있습니다.

just-in-time(JIT)컴파일(또한 동적 번역 또는 실행 시간을 컴파일),가 의 방법으로 실행하는 컴퓨터 코드을 포함한 컴파일 도중 실행 의 프로그램 실행 시간 보다는 이전에 실행.

그것은 컴파일은 의 조합 두 개의 전통적인 접근 방식을 번역하기 기계 코드 앞의 시간을 컴파일(AOT), 고 –과 결합한 몇 가지 장점과 단점이 있다. JIT 컴파일을 결합한 속도로 컴파일 된 코드의 유연성과 해석.

하자 고려 JIT 에서 사용되는 JVM,

예를 들어,핫스팟 JVM JIT 컴파일러에서 생성할 동적 최적화를 달성할 수 있습니다.다시 말해서, 그들은 결정을 최적화하는 동안 Java 응용 프로그램을 실행하고 생성하는 높은 수행하는 기본 기계 지침 을 대상으로 기반 시스템이 포함됩니다.

면 방법이 선택한 컴파일,JVM 피드 바이트 코드를 다시 컴파일러(JIT).JIT 요구를 의미를 이해하고 구문 바이트코드 전에 그것을 컴파일할 수 있는 방법을 제대로입니다.하는 데 도움 JIT 컴파일러를 분석하는 방법,그것의 바이트 코드를 처음 개선에서 내부 표현에 대한 흔적이라는 나무와 유사한 기계 코드를 더욱 밀접하게보다 바이트 코드.해석 및 최적화는 다음 수행에 나무의 방법입니다.끝에서,나무로 번역된 원시 코드입니다.

추적 나무 데이터 구조에 사용되는 런타임 컴파일한 프로그래밍의 코드입니다.추적 나무에 사용되는 형식의'시간에는 컴파일러는 흔적 코드 실행 중에스를 컴파일합니다.참조 .

참고:

20%의 바이트 코드를 사용하는 시간의 80%.JIT 컴파일러져 이러한 통계하고 최적화하이 20%의 바이트 코드를 실행하여 빠른 추가 인라인 방법을 제거에 사용하지 않은 잠금장치 등과를 만드 바이트 코드로 특정하는 기계입니다.나 인용하는 이 문서에서,나는 그것을 발견했다. http://java.dzone.com/articles/just-time-compiler-jit-hotspot

JIT 참조 실행 엔진에서의 JVM 구현,하는 것은 빠르지만,더 많은 메모리다시 컴파일러입니다.이 체계에서의 바이트의 방법은 컴파일을 기본 컴퓨터 코드의 첫 번째 시간은 메소드가 호출됩니다.기본 컴퓨터 코드에 대한 방법은 다음 캐시되어,그것은 다시 사용할 수 있습니다 다음 번에는 동일한 메소드가 호출됩니다.

JVM 실제로 수행하는 컴파일 단계 동안에 대한 런타임능 이유입니다.즉,Java 이 없는 깨끗하고 컴파일한 실행 분리입니다.그것은 첫째가는 정적에서 컴파일에 Java 소스 코드를 바이트 코드.그런 다음 이를 바이트 코드를 전달을 위한 JVM 을 실행합니다.하지만 실행하는 바이트코드린 JVM 측정하는 방법을 자주 바이트 코드는 실행하고 감지하면"핫 스팟"의 코드는 실행되는 자주 수행하는 동적으로 컴파일에서의 바이트 코드를 machinecode 의"핫 스팟"코드(핫스팟 프로파일러).그렇게 효과적으로 오늘 Java 프로그램에 의해 실행 machinecode 실행합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top