Pages

2015년 1월 21일 수요일

[JAVA] JIT 컴파일러(compiler)



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 을 만들어서 링크하는 방식이라고 한다. )

댓글 없음:

댓글 쓰기