[Java]JVM, JRE, JDK

J·2021년 12월 21일
0
post-thumbnail

1. 자바 가상 머신 (JVM, Java Virtual Machine)

  • JVM은 자바를 실행하기 위한 가상 기계(virtual machine)이다. 가상 기계는 소프트웨어로 구현된 하드웨어를 뜻하는 넓은 의미의 용어이다.

  • 자바로 작성된 코드는 모두 JVM에서만 실행되기 때문에, 자바 어플리케이션이 실행되기 위해선 반드시 JVM이 필요하다.

[▼ 그림- 일반 어플리케이션과 Java 어플리케이션 비교]

  • 위 그림처럼 자바 어플리케이션은 특정 OS를 거쳐 하드웨어로 전달되는 일반 어플리케이션과는 달리 JVM을 한 번 더 거친다. 또한 자바 어플리케이션은 하드웨어에 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석(interpret)되기 때문에 속도가 느리다는 단점도 존재한다.

  • 하지만 자바 또한 바이트코드(컴파일된 자바코드)를 하드웨어의 기계어로 바로 변환해주는 JIT컴파일러와 향상된 최적화 기술이 적용되어서 속도의 격차를 많이 줄였다.

  • 또한 위 그림에서 볼 수 있듯이 일반 어플리케이션은 OS와 바로 맞붙어 있기 때문에 OS에 종속적이다. 그래서 다른 OS에서 실행시키기 위해서는 어플리케이션을 해당 OS에 맞게 변경해야한다.

  • 반면에 Java 어플리케이션은 JVM하고만 상호작용을 하기 때문에 OS와 하드웨어에 독립적이라 다른 OS에서도 프로그램의 변경없이 실행이 가능하다.

  • 이러한 JVM의 역할로 인해 자바의 중요한 장점 중 하나인 "Write once, run anywhere.(한 번 작성하면 어디서든 실행된다.)"이 가능하게 되는 것이다.

  • 하지만, JVM은 OS에 종속적이기 때문에 해당 OS에서 실행가능한 JVM이 필요하다.


2. 자바 실행 환경 (JRE, Java Runtime Environment)

  • JRE는 자바 실행 환경으로 자바 클래스 라이브러리(Java Class Libraries), 클래스 로더(Class Loader), JVM을 포함하고 있다.

자바 클래스 라이브러리란 자바 코드를 작성하면서 자주사용 여러 유용한 기능들을 모아놓은 클래스 집합을 의미한다.

자바 클래스로더(Java Classloader)는 자바 클래스를 자바 가상 머신(JVM)으로 동적 로드하는 자바 런타임 환경(JRE)의 일부이다. 일반적으로 클래스들은 요청 시 한 차례만 로드된다. 자바 런타임 시스템은 클래스로더 때문에 파일과 파일 시스템에 대해 알 필요가 없다. 위임(delegation)은 클래스로더에 대해 학습할 때 이해하는데 중요한 개념이다.
- 나무위키

[▼ 그림- JRE = JVM + 클래스 라이브러리(Java API)]

- 이미지 출처: https://www.infoworld.com/article/3304858/what-is-the-jre-introduction-to-the-java-runtime-environment.html

3. 자바 개발 키트 (JDK, Java Java Development Kit)

  • JDK에는 JRE(Java Runtime Environment), 인터프리터(java), 컴파일러(javac), 아카이버(jar), 문서 생성기(javadoc) 및 기타 개발 도구가 포함되어 있다.

  • 또한 JDK는 소프트웨어 개발 환경이 제공 도구 및 Java 응용 프로그램 개발에 필요한 라이브러리의 컬렉션과 소스 코드를 JRE(Java Runtime Environment)가 실행할 수 있는 형식으로 변환하기 위해 필요하다.

[▼ 그림- JDK = JRE + 개발에 필요한 실행파일]

- 이미지 출처: https://medium.com/@mannverma/the-secret-of-java-jdk-jre-jvm-difference-fa35201650ca

0개의 댓글