1. 자바 소스코드(.java)를 작성한다.
2. 자바 컴파일러가 자바 소스파일을 컴파일하고 그 결과로 자바 바이트 코드(.class)를 만들어낸다. 바이트 코드는 컴퓨터가 바로 읽을 수 없으며 JVM이 이해할 수 있는 코드다.
3. 바이트 코드를 JVM의 클래스로더(Class Loader)에 전달한다.
4. 클래스로더는 동적 로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data area), 즉 JVM의 메모리에 올린다.
5. 실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행한다. 이때 실행 엔진은 두가지 방식으로 변경한다.
인터프리터: 바이트 코드 멸령어를 하나씩 읽어서 해석하고 실행한다. 전체적으로 실행 속도가 느리다.
JIT 컴파일러 (Just-In-Time Compiler): 인터프리터의 느린 속도를 보완하기 위해서 도입되었다. 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고 이후에는 해당 메서드를 더이상 인터프리팅 하지 않고, 바이너리 코드로 직접 실행하는 방식이다. 이로써 속도가 많이 향상되었다.
컴파일 언어는 소스 코드 전체를 기계어로 변역한 후 번역된 코드를 한번에 실행하는 두 단계를 거친다. -> 번역과 실행이 온전히 따로 이루어지는 것이다. C, C++, Go 등이 있다.
특징
인터프리터 언어는 소스 코드를 한줄씩 번역과 실행을 동시에 진행한다. 번역은 인터프리터를 통해 수행되며, Python, R, JavaScript 등이 있다.
특징
Java는 Java Compiler, Java Interpreter 모두 사용하기 때문에 하이브리드 언어라고 불린다. 처음에는 인터프리터 언어로써 사용되다가, 성능 향상을 위해 JIT 컴파일러를 가져오면서 컴파일 언어의 장점을 가져올 수 있었다.