JAVA는 인터프리터 언어일까? 컴파일 언어일까?

리리티·2022년 10월 17일
0

JAVA는 인터프리터 언어일까? 컴파일 언어일까?

자바는 어느 특정 언어에 속해있지 않고 각각의 특징이 섞여있는 하이브리드 언어이다.

자바 컴파일러

자바 컴파일 타임 환경에서 자바로 쓴 코드가 자바 컴파일러를 통해 자바 바이트 코드인 .class로 변환되는 과정을 가진다. 이후 러타임 환경에서 JVM을 통해 기계어로 변환하여 컴퓨터에 전달한다.

자바의 특성

자바는 기존 언어들에서 자주 찾을 수있는 단점들인 플랫폼과 하드웨어에 영향을 받는 부분을 줄이고자 만들었으며 자바를 통해 컴파일된 코드는 플랫폼에 독립적이다.

JIT 컴파일

JIT 컴파일은 동적 번역이라고도 하며 프로그램을 실제 실행하는 시점에 기계어로 변환하는 컴파일 기법이다.

장점

속도에서 큰 장점이있다. 실행할 때마다 기계어 변환 과정이 필요한 인터프리트 방식, 혹은 중간 코드 방식에 비해서 속도가 빠를 수밖에 없다.

단점

  • 프로그램을 처음으로 실행할 때에는 컴파일 과정 때문에 초기에 실행이 시작되는 속도가 많이 느리다.
  • 소스 코드 혹은 바이트코드 파일과 실행파일 코드가 같이 있기 때문에 용량을 많이 잡아먹게 된다

왜 JAVA는 JIT 컴파일을 사용하였는가?

매번 컴파일을 통해 Java파일을 ByteCode로 변환한 후 다시 인터프리터를 통해 한 줄 한 줄 기계어로 변환하는 작업은 속도면에서 매우 비효율적이며 느리다.

Display()라는 메서드가 중복되어 사용되었고 컴파일러가 Bytecode로 변환했는데 인터프리터가 변환된 Bytecode를 기계어로 바꿀때 Display() 메소드를 하나씩 전부 번역하게되는데 이를 JIT컴파일러를 통해 개선을 했다.

JIT 컴파일러가 소스 코드를 확인하여 중복된 부분을 기계어로 번역시켜 메모리에 저장해놓고 인터프리터 방식으로 번역하다 중복된 부분을 만나면 JIT 컴파일러로 기계어로 변환 시켜둔 코드를 재사용하여 JAVA 특성상 느린 속도를 획기적으로 개선하였다.

다만 중복된 코드가 적거나 재 사용될 코드가 적은 규모가 작은 프로그램 같은경우 실행속도가 느린 경우도 있다.

profile
remind

0개의 댓글