JVM 이란 무엇인가(feat. JRE, JDK)

김운채·2023년 5월 2일
0

Java

목록 보기
1/11

1. JVM의 개념

Write once, run everywhere !

JVM 은 'Java Virtual Machine'의 약자로 직역하면 '자바를 실행하기 위한 가상 기계'라고 할 수 있다. 영어권에서는 컴퓨터를 machine 이라고 부르기도 한다.

Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java 를 실행시킬 무언가가 필요하다. 그게 바로 JVM이다. 자바로 작성된 어플리케이션은 모두 JVM에서만 실행되기 때문에, 자바 어플리케이션이 실행되기 위해서는 반드시 JVM이 필요하다.

일반 애플리케이션 코드는 OS만 거치고 하드웨어로 전달 되기 때문에 OS 종속적이다. 그래서 다른 OS에서 실행시키기 위해서는 애플리케이션을 그 OS에 맞게 변경해야한다. 반면에 Java 애플리케이션은 JVM 하고만 상호작용을 하기 때문에 OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있다.
하지만 JVM은 OS에 종속적이기 때문에, 해당 OS에서 실행가능한 JVM이 필요하다.

그림을 보면 자바 소스파일을 javac 라는 java 컴파일러를 이용해서 컴파일 하면, 바이트코드가 생긴다(사람이 읽는 자바 코드에서 컴퓨터가 읽는 기계어로의 중간단계의 코드)
ex) hello.java 작성 => javac로 컴파일하면 => hello.class => .class 파일이 바이트코드

이 바이트코드를 jvm 에 갖다주면 컴퓨터가 이 프로그램을 실행할때 이 jvm 이 바이트코드를 그때그때 기계어로다가 통역을 해준다. 이것을 'just in time', JIT 컴파일 이라고 한다.

그래서 JVM 은 ..
👉 자바로 짜서 컴파일한 소프트웨어들이 jvm 이 깔린 어떤 종류의 컴퓨터에서든 돌 수 있게 해주는 것
이라고 할 수 있다.

2. JRE

그럼 내친김에 JRE 까지 알아보자.

JRE는 Java runtime environment 의 약자이다. 그럼 여기서 Runtime 이란 것은 무엇일까?

이 런타임이란 것은 앞서 본 컴파일 타임이라는 것과 대조되는 것이다.

  • 컴파일 타임 : 코딩 다하고 실행하거나 배포하기전에 미리 해두는 번역 작업하는 시점
  • 런타임 : 이걸 run, 실행하는 시점

그러니까 JRE는 자바 실행환경으로 자바 프로그램을 실행하는데 필요한 것이다.

❓ 컴파일 된 것들을 JVM 이 기계어로 그때그때 읽어주면 되는 거 아닌가? 왜 JRE가 필요하지?

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

널리 쓰이는 & JVM 에서 도는 라이브러리들(list, map) 을 JVM 이랑 세트로 묶어다가 다운받아 설치할 수 있도록 한게 JRE 인 것이다.

3. JDK

JDK는 Java Development Kit의 약자이다.

JRE가 JVM을 포함하는 것 처럼 JDK는 JRE+Development Kit 즉, 자바의 런타임때 필요한 요소들도 포함하면서 거기에다가 개발에 필요한 것들을 포함한다.
ex) javac(java compile), jdb(자바 디버깅), 서로 연관있는 클래스들을 묶어주는 jar 등..

🤷‍♂️JRE 와 무엇이 다른가?

JRE로 자바 프로그램을 실행시키는데는 문제가 없지만 자바 프로그램을 코딩할 때 JDK가 아니라 JRE를 사용하면 문제점이 생길 수 있다.
ex) 컴파일이 정상적으로 되지 않을 수도 있다.

JDK가 자바 개발 키트이니 JRE를 포함하고 있다. 그래서 자바 프로그램 개발을 위해서는 바로 이 jdk를 다운로드 받아 자바 기능을 사용하고 컴파일 해야하는 것이다.

즉, 자바 프로그램을 실행시키는 건 JRE, 자바 프로그램을 개발하는데 필요한 건 JDK 이다.

이처럼 최종 사용자가 아닌 프로그래머를 위한 기능들도 같이 탑재하고 있다.
그래서 JDK를 설치하면 JRE, JVM 이 같이 설치 된다.

3-1. JDK 버전

출처:https://www.youtube.com/watch?v=f0cAmTYo4tQ

이렇게 JDK5에서는 Generic, JDK 8에서는 Lamda가 추가 되는 것처럼, JDK는 버전이 올라갈때마다 기능이 추가 된다.
그리고 LTS 는 Long Time Support 로, 오래 지원하겠다는 의미이다.

3-2. JDK 종류

JDK 에도 많은 종류가 있지만 간략하게 Oracle JDK, Open JDK 두개만 정리 해보았다.

종류설명
Oracle JDK상업적 이용에 한해서 유료, 개인은 무료
Open JDKOracle JDK와 비슷한 성능, 언제나 무료

이렇게 기능자체는 비슷하지만 성능과 비용에 차이가 있을 수 있다.

0개의 댓글