JIT 컴파일러(Compiler)에 대해 알아본다. |
이미지 출처 : helloworld.naver.com
JIT 컴파일러의 JIT는 Just-In-Time 의 약자로, 말 그대로 하면, "그 순간" 컴파일러라는 뜻인데, 사용할 때 컴파일한다는 의미이다. 무슨 말인지 모를 것이다. 당연하다. 하지만 아래의 글을 읽어보면, 아아.. 그런 말이구나 할 것이다.
이 JIT Compiler는 자바에서 대표적으로 사용하고 있다.
( 요즘은 Platform Independent 가 대세이기 때문에 .NET 도, 브라우저도 사용한다. )
Java에서 Compile 을 하면 Bytecode 로 변환된다.
( 이는 수도없이 들어봤을 것이다. 하지만 제대로 이해하지 못했을 것이다.. ?? )
이 바이트코드는 기계가 바로 읽을 수 있는 형태가 아니며,
이 바이트코드는 실제 실행될 때 다시 한번 기계가 읽을 수 있는 형태(native code)로 interpreter 를 통해 해석이 되어야 한다.
이렇게 한번에 기계어로 변환하지 않고 두번의 과정을 밟는 이유는
Java 의 최대 장점 중 하나인 machine-independent 특성때문이다.
platform independent 라고도 하는데, 요건 한번 작성하면 어떤 기계에서든 돌릴 수 있다는 특성을 말한다.
프로그래머 입장에서는 "야호!" 를 부를 수 있는 특성으로, 이 특성때문에 자바가 참 잘나간다.
프로그래머들은 별 걱정없이 프로그램을 작성해서 byte code 로 컴파일을 하고,
JVM( Java Virtual Machine ) 이 이 bytecode 를 해당 기계에 맞는 기계어로 다시 번역하는 작업을 하는 것이다. 기계어로 변환하는 작업은 OS 와 CPU 에 dependent 하기 때문에, JVM 만드는 사람들만 새로운 OS 와 CPU 에 대해서 긴장하면 되는 것.
이 JVM이 bytecode -> 기계어로 interpret(해석) 할 때,
반복되는 내용은 컴파일을 해서 사용하곤 한다.( 한번만 컴파일된다. )
요 과정을 JIT 컴파일링이라고 한다.
JIT 컴파일링은 실행될 때 최초 실행되기 때문에, 최초실행에서는 조금 느릴 수 있다.
JIT 컴파일러를 사용하면, 컴파일 없이 Interpret만 하는 경우보다 반복적인 작업을 할 때 훨씬 높은 성능을 낼 수 있다.
( Vtable 을 만들어서 링크하는 방식이라고 한다. )
Java 뿐만이 아니라 요즘은 브라우저에도 JIT 컴파일러가 들어있다.
자 이제 서두에 말한, "사용할 때 컴파일" 한다는 말이 이해가 되는가?
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] dip, dp, px 와 해상도의 관계 (0) | 2013.06.28 |
---|---|
[Spring] Spring Framework 의 개요 #3 (0) | 2013.06.27 |
[java/tutorial] regexp 에 대해 알아보자. (0) | 2013.06.26 |
[Spring] Spring Framework 의 개요 #2 (0) | 2013.06.25 |
x86 안드로이드에 대해 알아보자. (0) | 2013.06.25 |
댓글