[JAVA] JVM (정의, 클래스 로드, 실행 엔진, 인터프리터, JIT 컴파일러)

조진우·2023년 8월 18일
0

Java

목록 보기
5/6
post-thumbnail

JVM (Java Virtual Machine) 정의

  • OS와 애플리케이션 사이의 중개자 역할
  • JVM은 자바 바이트 코드를 해석하고 실행
  • JVM이 있다면 OS에 상관없이 JAVA 애플리케이션 실행 가능

JVM 구성

1. Class Loader (클래스 로더)

  • 요약 : 클래스 파일을 로드하고, 링크를 통해 배치을 수행하는 모듈
  • JVM내로 .class 파일을 로드
  • Runtime 시점에 클래스를 로딩
  • 클래스의 인스턴스를 생성하면 메모리에 로드

2. Execution Engine (실행 엔진)

  • 요약 : 로드된 클래스의 바이트 코드를 실행하는 런타임 모듈
  • 클래스 로더를 통해 Runtime Data Area에 배치된 바이트코드는 실행엔진에 의해 실행
  • 실행 방식에는 Interpreter(인터프리터) 방식과 JIT compiler 방식

Interpreter (인터프리터)

  • 요약 : 프로그래밍 언어의 소스 코드를 바로 실행하는 프로그램.
  • 소스 코드를 기계어로 번역하는 컴파일러와 대비
  • 자바는 인터프리터 방식을 사용.
  • But 한 줄씩 수행하기에 수행 속도가 느림

JIT Compiler (Jst In Time Compiler)

  • JIT 컴파일러는 바이트코드를 컴파일하여 native code(네이티브 코드)로 변환하여 사용
  • 한 번 컴파일된 코드는 빠르게 수행하게 되어 수행 속도가 빠르게 된다. 하지만, 컴파일 하는 과정에서 비용이 들어감. 한 번만 수행할 코드라면 컴파일 하지 않고 인터프리팅 하는 것이 유리함

결론 : JVM은 인터프리팅 방식을 사용하다가 일정 기준이 넘어가면 JIT 컴파일러를 사용하는 혼합 방식

chat-gpt 검색
JIT 컴파일러는 Just-In-Time 컴파일러의 줄임말로, 바이트코드를 실행하기 전에 바로 네이티브 코드(기계어)로 변환하는 기술을 가리킵니다. 이는 소스 코드를 직접 기계어로 변환하는 것과는 약간 다릅니다.
간단히 말해, 소스 코드를 컴파일할 때 대부분의 경우 중간 단계의 바이트코드가 생성됩니다. 바이트코드는 자바와 같은 언어에서 사용되는 중간 형태의 코드로, 자바 가상 머신(JVM)에서 실행됩니다. 이 바이트코드는 기계어보다는 추상화된 형태이며, 각 운영 체제의 기계어와는 상이한 구조를 가집니다.
JIT 컴파일러는 이러한 바이트코드를 실제 실행 시점에 동적으로 네이티브 코드로 변환하여 실행합니다. 이 변환 과정을 거쳐서 기계어로 된 코드를 직접 실행하므로, 이전에 컴파일한 바이트코드보다 훨씬 빠른 실행 속도를 얻을 수 있습니다. JIT 컴파일러는 실행 시간에 필요한 부분만 네이티브 코드로 변환하며, 이를 통해 최적화된 실행 성능을 제공합니다.
따라서, JIT 컴파일러는 소스 코드를 컴파일하여 기계어로 변환한다는 의미와 비슷하며, 실행 시점에서 동적으로 이 변환 작업을 수행하는 것을 강조합니다.

출처

https://code-lab1.tistory.com/92
chat-gpt

profile
The Top of Iceblog

0개의 댓글