JVM, JRE, JDK가 뭔가요?

KIM YONG GU·2023년 8월 31일

얄팍한코딩사전

목록 보기
2/23

JVM(Java Virtual Machine)

자바 가상 머신, 그냥 프로그램이다. 통역 프로그램.

우리가 코딩할 때 자바나, C는 사람들이 보기 편하려고 만든 것임.
실제 컴퓨터는 0과 1만 받아들인다. 이를 기계어라고 한다. 2진수로 된, 바이너리로 작상된 언어.
자연어를 기계어로 바꿔주는 것이 컴파일러. 파이썬은 인터프리터 언어를 씀 일단 논외로.

운영체제에 따라 컴파일러가 다르다. (윈도우, MAC 등)
자바 컴파일러 (javac). 안드로이드 전용 컴파일러 코틀린(Kotlin)

자연어-바이트코드(*.class)-기계어
Groovy, Scala, Clojure, Kotlin 등은 JVM 전용 바이트코드로 컴파일이 가능하다.
JIT(Just In Time) 컴파일러

JVM은 자바로 짜서 컴파일한 소프트웨어들이 JVM이 깔린 어떤 종류의 컴퓨터에서든
돌 수 있게 해주는 것. 그래서 '한 번 작성하면 어느 곳에서든 실행한다.
WORA(Write On Run Anyware). 이것이 자바의 원칙임.

JRE(Java Runtime Environment)

런타임은 컴파일타임과 대조되는 말임.
컴파일이란 건 아까 얘기한 그 번역 작업, 즉 코딩 다하고 이걸 실행하거나 배포하기 전에
'미리' 해두는 번역 작업. 그걸 하는 시점이 컴파일 타임.

런타임은 반대로 Run, 실행하는 시점임. JRE는 JAVA로 잔 소프트웨어가 컴파일 및 빌드까지 다 된 다음, 이를 사용할 곳에 주어져서 실행이 될 때 그 환경 요소들로서 필요한 것들임.

소프트웨어라는 게, 딱 우리가 자바나 그런 언어로 작성한 코드만으로 돌아갈 수 있는게
아니거든요. 예를 들어서 우리가 자바의 자료구조 기능들인 List나 Map, Set 같은 걸 사용할 수 있는 이유는 우리가 일일이 그런 기능들을 다 구현했기 때문이 아니라 그것들이 바이트코드로 컴파일 된 클래스로 제공이 되기 때문임.

그래서 이처럼 널리 쓰이는, 그리고 JVM에서 도는 라이브러리들을 JVM이랑 세트로 묶어다가 다운받아서 설치될 수 있게 자바 런타임 환경 JRE임. 보통 JRE만 깔아도 코딩이 가능한게 JRE가 JVM도 포함을 하고 있기 때문임.

JDK (Java Development Kit)

자바 개발 도구. JRE가 JVM을 포함하는 것처럼, JDK도 JRE를 포함한다.
거기에 추가해서 JDK에는 개발에 필요한 것들. 자바 코드를 컴파일 할 떄 쓰는 javac
자바를 디버깅할 때 쓰는 jdb, 서로 연관있는 클래스를 하나의 JAR 파일로 묶어주는 jar

Java 자체는 무료. Oracle JDK는 상업적 허용은 유료. 개인은 무료.
그 외에도 Azul에서 만든 Zulu, Amazon의 Correto, 마이크로소프트의 Open JDK 등등
JDK 배포 버전에 따라 내장된 JVM도 차이가 있을 수 있다.

profile
Engineer, Look Beyond the Code.

0개의 댓글