컴파일러 VS 인터프리터

J-USER·2021년 8월 27일
0

JAVA

목록 보기
3/5
post-thumbnail

JVM 을 공부하다 의문이 생겨 한번 정리를 해보겠습니다.

JVM 은 한번 작성된 자바에서 작동한다 👉 자바는 컴파일러 언어다 👉 JVM은 중간단계인 .class를 생성한다... 👉 인터프리터인데..??🤯

이런 혼란스러움을 진정시키기 위해서 두 가지에 대한 것을 정리해보겠다.

컴파일러.

  • 프로그램 언어를 기계어로 변환해쥼.

인터프리터

  • 한줄씩 읽어서 프로그램언어 - () - 기계어 사이의 중간 언어로 변환하고 이 중간 언어를 실행 주체가 실행시킴.

차이점은..?

  • 컴파일러의 장점은 컴파일된 프로그램들은 일반적으로 인터프리터를 이용해 실행시키는 것보다 더 빠르게 실행된다.

  • 인터프리터의 장점은 기계어 명령어들이 만들어지는 컴파일 단계를 거칠 필요가 없다. 그리고 프로그램의 크기가 크다면, 컴파일 하는데 상당한 시간이 걸릴 수 있다. 그러나 인터프리터는 파일이 커져도 바로 실행가능.

JVM은 인터프리터야..?

결론 : 둘다 씀 ㅋ

JVM의 구성

JVM은 다음과 같이 구성됩니다.

자바 인터프리터(interpreter)
:컴파일러에 의해 변경된 바이트코드를 읽고 해석하는 역할

클래스 로더(class loader)
: 동적으로 클래스를 로딩해주는 역할

JIT 컴파일러(Just-In-Time compiler)
: 컴파일러에 의해 생성된 바이트 코드를 런타임에 기계어로 변환하는 역할

가비지 컬렉터(garbage collector)
: 사용하지 않는 메모리를 자동으로 회수하여 자원관리를 해주는 역할

🙋 아니 그럼 둘다 쓰는거에요??
🤖 ㅇㅇ 하이브리드임 ㅋ

JVM에서는 인터프리터는 해석을 위한 Virtual Machine 을 두고, Machine 위에서 인터프리터를 수행하게 되는데, 이 때 해석의 기반이 되는 머신들이 OS 환경들을 지원해줌으로써, 해당 방식으로 인터프리터는 OS 및 플랫폼 에 종속되지않는 프로그램 구동이 가능하게 된다.

😅 말이 어렵네요..
🤖 요약 가즈아

결론⭐️

1. JVM은 컴파일러와 인터프리터 모두를 사용한다.
2. javac 컴파일러는 .java 파일을 중간 코드인 바이트 코드로 번역하여 .class파일을 생성한다.
3. 자바 인터프리터는 class파일 내의 바이트 코드를 특정 환경의 OS에서 실행될 수 있도록 기계어로 번역한다.

profile
호기심많은 개발자

0개의 댓글