jit컴파일러

JIT 최적화 기법 지난 글에서 JIT 최적화의 기법으로 메소드 인라이닝, 루프 펼치기, 탈출 분석을 살펴보았다. 이번 글에서는 단형성 디스패치, 인트린직, 온스택 치환 기법을 살펴보도록 하자. 단형성 디스패치(Monomorphic Dispatch) 단형성 디스패치는 메소드 호출을 최적화하는 방법이다. 일반적으로 Java에서 메소드를 호출할 때 객체의 타입에 따라 호출되는 메소드가 달라진다. 따라서 객체의 OOP(Ordinary Object Pointer)를 참조해 호출할 메소드를 찾아 실행하는 과정을 거친다. 그러나 대부분의 경우, 메소드를 호출하는 위치에서 객체의 타입은 한 가지로 결정된다. 이것을 이용해 메소드를 찾는 과정을 없애 한 가지 메소드만 호출하도록 바꾸는 것이 단형성 디스패치이다. 예를 ..
JIT 컴파일 우리가 작성한 소스코드를 컴퓨터가 실행하도록 만들기 위해서는 컴퓨터의 명령어로 변환해줘야 한다. C/C++같은 언어들은 실행하려는 컴퓨터의 환경에 맞게 미리 컴파일해서 실행가능 파일을 만든다. 반면, Python이나 JavaScript같은 인터프리터 언어들은 소스코드를 한 줄씩 읽어 실행가능한 명령어로 변환한다. 컴파일 언어는 실행가능 파일을 실행만 하면 되기 때문에 비교적 성능이 좋고, 인터프리터 언어는 속도는 비교적 느리지만 인터프리터가 있는 환경이라면 어디서든 같은 코드를 실행시킬 수 있다는 장점이 있다. Java는 독특하게 컴파일 언어의 특징과 인터프리터 언어의 특징을 모두 가진다. 소스코드를 컴파일해서 바이트 코드로 변환하고, 바이트 코드는 JVM의 실행 엔진에 있는 인터프리터로 ..
바이트코드 실행 바이트코드를 열어보면 명령어는 조금 다르지만 어셈블리어와 비슷한 형태로 만들어진 것을 확인할 수 있다. 실제 CPU에서 어셈블리 명령어를 읽어서 실행하는 것처럼, JVM은 바이트코드 명령어들을 한 줄씩 읽어서 명령어의 종류에 따라 동작을 실행한다. 이러한 바이트코드는 실제 CPU에서 실행할 수 있는 형태가 아니기때문에, 이것을 CPU에서 실행할 수 있는 형태로 변경하는 작업이 필요하다. 이러한 작업을 해주는 것이 JVM의 실행 엔진이다. 실행 엔진은 크게 3부분으로 구성되어있다. 바이트코드 명령어를 하드웨어 명령어로 해석해서 실행하는 interpreter, 성능을 개선하기 위해 자주 사용되는 바이트코드를 미리 하드웨어 명령어로 컴파일하는 JIT(Just In Time) 컴파일러, 그리고 ..
ready-go
'jit컴파일러' 태그의 글 목록