Java - compile, interpreter

BK·2024년 4월 3일
0

Java

목록 보기
1/9

Compile 언어, Interpreter 언어

  • Compile 언어는 전체 source code를 기계어로 번역하는 compile 과정을 거친 후 동작하는 언어
  • Interpreter 언어는 source code를 한줄 한줄 번역(?)하여 실행하는 언어
  • Compile언어의 특징은 컴퓨터에서 실행되는 기계어로 번환된 명령을 실행하기에 컴파일 이후 실행 속도가 빠르다
  • Interpreter 언어는 실행 전 compile 과정을 거치지 않아 시작 속도가 빠르지만, 실행 단계에서 code를 번역하기에 한 줄의 실행 속도는 compile 언어에 비해 느릴 수 있다.

Java는 compile 언어? interpreter 언어?

  • C언어는 compile 언어이며, javascript는 interpreter 언어이다.
  • Java는 compile 언어와 interpreter 언어의 특징을 모두 가지는 언어이다.
  • Java source code를 작성하면 파일의 확장자는 .java이다.
  • 이를 JVM이 실행 가능한 파일로 변환하면 .class 파일이 된다. javac 명령어를 통해 변환할 수 있으며, 이 과정에서 Compile 과정을 거친다.
  • 하지만 이 .class 파일은 컴퓨터가 실행 가능한 기계어가 아니다. .class파일은 Java의 Byte Code로,JVM은 이 파일을 실행하기 위해 기계어로 변환하여 OS에 전달하는데, 이때 java interpreter를 사용하며 각 code를 실행하는데에 있어 interpret 과정을 거친다.

Java는 우선 compile한 후 code를 실행하기 위해 각 줄을 번역하는 compile언어와 interpreter언어의 특성을 모두 가진 하이브리드 언어이다.

Javac and Java Interpreter

WORA(Write Once Run Anywhere)

Java는 동작에 있어 OS 독립적인 언어이다. JVM을 통해 code를 OS 환경에 맞게 번역하여 실행 가능하도록 하기에 interpreter언어로 동작한다고 하는 것 같다. 사실 이것도 잘 모르겠다

처음 interpreter 방식으로 설계된 후 compile언어의 장점을 채택하고자 java compiler에서 compile 방식을 사용한다고 한다. Compile 언어의 장점이 분명히 존재하기에 compile 방식을 채택한 것은 이해가 되지만 interpreter 방식을 채택(?) 또는 유지하고 있는 이유에 대해서는 이해되지 않는다. 아는게 없으니까 모르겠지.
JVM 공부를 더 해봐야할 것 같다

JVM

*.java 파일을 *.class 파일(Byte code)로 변환할 때 뿐 아니라, JVM에서 JIT(Just-In-Time) Compiler가 존재한다. JIT compiler는 기존 Java Interpreter를 통해 plattform 독립적인 WORA를 가능하게 하던 방식에서 발생하는 성능 문제를 해결하고자 도입된 compiler로, 자주 실행될 메소드를 미리 byte code(*.class)를 기계어로 컴파일하는 compiler한다.
Java는 자주 실행되는 함수를 미리 기계어로 컴파일하여 캐싱하는 방식을 통해 성능 문제를 해결하려고 했다.
JIT Compiler, Java Interpreter, warm up 등 JVM에 관련된 자세한 내용은 추후 JVM 관련 포스팅에서 작성 해보겠다.

0개의 댓글