TIL.Java - JVM, JDK, JRE의 차이를 알아보자✍️

mingreen·2021년 7월 25일
0

Java

목록 보기
1/1
post-thumbnail

스프링 프로젝트, 공부를 하다보니 가장 기반이 되는 자바 공부가 필요하다고 느껴 시작!

구글링과 책을 통해 공부하다가 인프런에서 좋은 강의를 발견하게 되어 함께 수강하며 정리하려고 한다.

Java 언어로 작성한 코드를 실행하기 위한 환경부터 알아보자

JVM, JRE, JDK 개념의 큰 틀은 아래 그림과 같다

JVM (Java Virtual Machine)

  • 자바 바이트 코드(.class)를 OS에 특화된 코드로 변환하여 실행하는 역할이다.
  • JVM은 바이트 코드를 실행하는 표준이고 이를 밴더들이 구현한 구현체를 제공한다.
  • 대표적으로는 오라클, 아마존이 있고 따라서 특정 플랫폼에 종속적이다.

JRE (Java Runtime Environment)

  • JVM + Library 이다.
  • 자바 어플리케이션을 실행할 수 있는 환경을 제공, 개발할 수 있는 환경을 제공하지는 않는다.

JDK (Java Development Kit)

  • JRE + 개발에 필요한 툴들이 들어있다.(컴파일에 사용하는 javac도 여기에 들어있음)
  • 소스 코드를 작성할 때 사용하는 자바 언어는 플랫폼에 독립적이므로, 어느 JVM에서 실행을 하더라도 동일하게 실행할 수 있다.
  • Oracle은 자바11부터 JDK만 제공하며 JRE는 따로 제공하지 않음.

Java 프로그램 실행 과정

위 개념을 생각하면서 아래 실행과정을 살펴보면,

  1. simple.java 라는 파일을 IDE를 통해 생성한다.
  2. 자바 컴파일러(JDK의 javac)를 통해 파일을 컴파일한다.
  3. 컴파일 결과로 simple.class라는 바이트 코드 파일이 생성된다.
  4. JVM이 해당 파일을 실행하는 플랫폼/OS 기반 기계어로 변환하며 실행시킨다.

기타 궁금증

Java 의 모듈 시스템?

Java 9부터 들어온 시스템이고, 이를 통해 jlink를 사용해서 JRE를 직접 구현할 수 있다. (하지만 직접 구현하는 일은 거의 없다고 한다..)

Java 의 유료화?

오라클에서 만든 Oracle JDK 11버전부터만 상용 목적으로 사용할 때 유료이다. 즉 Oracle에서 만든 OpenJDK 또는 Amazon에서 만든 Corretto 등은 무료로 사용가능하다.

JVM 언어?

JVM은 처음에는 자바를 위해 만들어졌지만, Java와의 의존성이 크지 않다.
즉, 다른 언어로 코드를 작성하더라도 컴파일을해서 .class 파일이 생긴다면 JVM의 환경을 사용할 수 있다는 것이다.
이 방법은 프로파일링 툴, 성능 최적화, JVM Interpreter/JIT 등 JVM의 노하우를 그대로 사용 가능한 장점이 있다.
예) Kotlin, Scala, JRuby, Jython 등


*참고
인프런 - 더 자바, 코드를 조작하는 다양한 방법(백기선)
Java가 아직 무료인 이유
JVM, JRE, JDK

profile
주니어 백엔드 개발자의 기록하는 습관 만들기🧑‍💻

0개의 댓글