-> 최초의 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와 함께 실행하는 것입니다.
JVM = Interpreter + class loader + JIT compiler + garbage collector
자바 인터프리터 : 자바 컴파일러에 의해 변환된 바이트코드를 읽고 해석
클래스 로더 : 자바의 동적 로드(컴파일 타임이 아니라 런타임(바이트코드 실행 시)에 클래스 로드하고 링크)를 담당. 클래스 로더는 런타임 중에 JVM의 메소드 영역에 동적으로 Java 클래스를 로드하는 역할을 한다.
JRE = JVM + Java Class Libraries
-> JRE는 읽기 전용, JDK는 읽기/쓰기 전용이라 생각할 수 있다.
자바 프로그램을 개발하기 위해 필요한 툴(javac, java)들을 모아 놓은 소프트웨어 패키지
Reference : https://pjuyeon25.medium.com/java-jdk-jre-jvm-%EC%B0%A8%EC%9D%B4-b5a60fe4653, https://d2.naver.com/helloworld/1230