본문 바로가기
프로그래밍 놀이터/안드로이드, Java

JIT 컴파일러(Compiler)에 대해 알아본다.

by 돼지왕 왕돼지 2013. 6. 27.
반응형

JIT 컴파일러(Compiler)에 대해 알아본다.



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 컴파일러가 들어있다.


자 이제 서두에 말한, "사용할 때 컴파일" 한다는 말이 이해가 되는가?




반응형

댓글