[Java] JDK, JRE, JVM

ㅇㅅㅇ·2024년 1월 8일
0

Java

목록 보기
1/1
post-thumbnail

0.자바 코드 실행 과정

  • 작성한 자바소스(.java) 파일을 자바 컴파일러를 통해 바이트코드(.class)로 컴파일
  • 바이트코드를 JVM의 클래스로더에 전달
  • 클래스로더는 동적로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data Area), 즉 JVM의 메모리에 올린다.
  • 실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행

-> 최초의 JVM, 인터프리터 방식으로 느림
-> JIT(Just-In-Time) 컴파일러를 통해 속도를 보완
(JIT는 바이트 코드를 어셈블러 같은 네이티브 코드로 바꿈으로써 실행이 빠르지만 변환하는데 비용이 발생)
-> 인터프리터 방식을 사용하다가 일정한 기준이 넘어가면 JIT 컴파일러 방식으로 실행

JVM : 자바 가상 기계, 가상의 컴퓨터
JRE : 자바 실행 환경, JVM용 OS
JDK : 자바 개발 도구, JVM용 소프트웨어 개발 도구

자바 바이트코드가 JRE 위에서 동작한다. 이 JRE에서 가장 중요한 요소는 자바 바이트코드를 해석하고 실행하는 JVM(Java Virtual Machine)이다. JRE는 자바 API와 JVM으로 구성되며, JVM의 역할은 자바 애플리케이션을 클래스 로더(Class Loader)를 통해 읽어 들여서 자바 API와 함께 실행하는 것입니다.

1. JVM (Java Virtual Machine)

JVM = Interpreter + class loader + JIT compiler + garbage collector

자바 인터프리터 : 자바 컴파일러에 의해 변환된 바이트코드를 읽고 해석
클래스 로더 : 자바의 동적 로드(컴파일 타임이 아니라 런타임(바이트코드 실행 시)에 클래스 로드하고 링크)를 담당. 클래스 로더는 런타임 중에 JVM의 메소드 영역에 동적으로 Java 클래스를 로드하는 역할을 한다.

  • Java가 실제로 동작하는 가상 환경. class file 안에 들어있는 자바 바이트코드를 인터프리터나 JIT 컴파일러를 실행해 OS에 특화된 코드로 변환하여 실행 (플랫폼 종속적)

2. JRE (Java Runtime Environment)

JRE = JVM + Java Class Libraries

  • JVM이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있다.
  • 자바 프로그램 실행을 위해 JRE를 반드시 설치해야하고, 프로그래밍을 위해서는 JDK가 필요하다.

-> JRE는 읽기 전용, JDK는 읽기/쓰기 전용이라 생각할 수 있다.

3. JDK (Java Development Kit)

자바 프로그램을 개발하기 위해 필요한 툴(javac, java)들을 모아 놓은 소프트웨어 패키지




Reference : https://pjuyeon25.medium.com/java-jdk-jre-jvm-%EC%B0%A8%EC%9D%B4-b5a60fe4653, https://d2.naver.com/helloworld/1230

0개의 댓글