컴파일 언어는 소스 코드를 컴파일한 후, 기계어를 메모리와 CPU를 통해 읽어서 실행하는 방식으로 동작하는 언어를 말한다. 컴파일 후, 프로세서가 실행할 수 있도록 변환된 기계어 코드를 별도의 파일에 저장한다.
소스코드를 컴파일하지 않고 코드를 한 줄씩 읽어서 바로 실행하는 언어이다. 빌드 과정을 거치지 않기 때문에 번역과 실행이 동시에 이루어진다.
Java는 컴파일 언어가 될 수 있고 인터프리터 언어가 될 수 있다. Java는 다른 컴파일 언어들이 동작하듯 Java 컴파일러가 JVM이 실행할 수 있는 바이트 코드로 번역을 해준다. 그리고 컴파일된 파일을 실행하기 위해 JVM이 컴퓨터가 이해할 수 있는 2진 코드로 번역하기 위해 Java 인터프리터를 이용하여 한 줄씩 읽으면서 번역 후 실행한다.
Java는 기존 언어들의 단점이었던 운영체제와 하드웨어에 영향을 받는 부분을 없애고자 인터프리터 언어를 컴파일을 진행 후 인터프리터로 변환하는 작업을 진행하도록 처리했다.
JIT 컴파일러란 자바에서 속도에 대한 이슈를 해결하고자 노력하면서 등장하게 됐다. JIT 컴파일러는 프로그램이 실행되는 동안 JVM이 자주 사용되는 코드를 찾게 되면 해당 코드를 기계어로 컴파일을 한다. 컴파일 과정에서 어느정도 시간이 소요되지만 컴파일된 코드는 나중에 다시 실행될 때 빠르게 재사용 되므로 프로그램 전체 실행 시간을 줄이는데 기여를 하게 된다.
https://jooona.tistory.com/157
https://noodabee.tistory.com/entry/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC-%EC%96%B8%EC%96%B4%EC%99%80-%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0-%EC%96%B8%EC%96%B4
https://well-made-codestory.tistory.com/30
https://velog.io/@rmsry123/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC-%EC%96%B8%EC%96%B4%EC%99%80-%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0-%EC%96%B8%EC%96%B4
https://gusrb3164.github.io/computer-science/2021/03/01/compile,-interpreter-language/