JAVA의 JVM, JRE, JDK 정리

2021. 6. 30. 13:44JAVA

JVM, JRE, JDK에 대해서 설명하기 전에 소스코드의 컴파일 과정에 대해서 설명하겠습니다.

 

소스코드의 컴파일 과정

소스코드의 컴파일 과정

컴퓨터에게 어떤 일을 수행시키기 위해서는 소스코드를 컴파일하는 과정이 필요하다. 왜냐하면 컴퓨터는 사람이 작성한 소스코드를 바로 해석해 일을 수행하지 않고 기계어만을 통하여 일을 수행하기 때문이다. 따라서 위의 그림과 같이 소스코드는 컴파일러(compiler)에 의해서 컴파일(compile)이 수행되어 바이너리 코드로 생성되고 컴퓨터는 바이너리 코드를 해석하여 모니터(콘솔)에 출력한다.

 

  • 컴파일(compile) : 사람이 작성한 소스코드(.java, .c, .cpp)등을 기계어로 번역하는 과정
  • 컴파일러(compiler) : 컴파일을 수행하는 프로그램
  • 바이트 코드(바이너리 코드) : 기계어(0,1)로 이루어진 코드, 컴퓨터가 이해할 수 있는 코드이다.

기계어(0과 1)의 조합의 문제점

기계어의 조합의 문제점은 운영체제(OS, Operating System)마다 다르다는 문제점이 존재한다.

위의 그림과 같이 C언어 기반으로 작성한 소스코드를 C언어 컴파일러가 컴파일을 수행하고 바이너리 코드를 각각의 운영체제(windows, MacOS, Linux)에게 주면 윈도우는 잘 이해하고 명령을 수행할 수 있지만 다른 운영체제들은 기계어의 조합이 달라서 수행하지 못할 수도 있다. 따라서 위 문제를  해결하기 위해서는 아래 그림과 같이 운영체제별로 각기 다른 C 컴파일러가 필요하다.

 

 

 

하지만 JAVA언어 같은 경우 각각의 운영체제별로 컴파일러가 필요하지 않다. Java는 Java 컴파일러 하나만 존재하고 운영체제 위에서 컴파일 하는 것이 아닌 JVM(Java Virtual Machine)이라고 하는 자바 가상 머신 위에서 컴파일이 수행되어 운영체제에게 기계어가 전달된다. 즉, Java언어의 컴파일 과정은 아래와 같이 진행된다.

 

 

JVM(Java Virtual Machine)의 역할

JVM의 역할은 운영체제와 바이너리 코드 사이에서 둘을 호환시켜주는 역할이다. 따라서 운영체제 위에 JVM을 거쳐서가기 때문에 C 컴파일러와는 달리 Java 컴파일러 하나만 존재하면 된다. JVM이 각각의 운영체제에 맞추어 알아서 번역해줄 것이다. 즉, 자바 소스코드를 컴파일하면 모든 운영체젱서 똑같은 결과가 나오게 될 것이다.

 

JVM, JRE, JDK 개념

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

자바 가상 머신은 위에 설명한 JVM의 역할 설명과 같이 운영체제와 바이너리 코드 사이에서 둘을 호환시켜주는 역할이다. JVM은 운영체제별로 존재하며 바이너리 코드를 읽고 검증하고 실행한다. 정리하면 JVM은 자바 컴파일러와 운영체제 사이에서 컴파일러가 컴파일한 바이너리 코드를 운영체제에 맞게 연결시켜주는 도구이다.

 

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

자바 실행 환경은 자바 가상 머신(JVM) + 자바 프로그램을 실행에 필요한 라이브러리 파일 등으로 구성되어 있다. 즉, JVM의 실행 환경을 구현한다. 정리하면 자바 프로그램을 실행할 수 있게 도와주는 도구이다.

 

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

자바 개발 키드는 자바 실행 환경 + 개발도구 등으로 구성되어 있다. 그리고 컴파일러(Compiler), 디버거(Debugger) 등이 포함되어 있다. 보통 Java 버전이 JDK의 버전이다. 현재 Java 버전은 2021년 6월기준 Java SE 1.1 ~ 16까지 구성되어 있다. JDK의 종류에는 대표적으로 Oracle JDK, Open JDK가 존재한다. Oracle JDK는 오라클에서 만든 JDK이고 개인에게는 무료이고 기업에게는 유료이다. 반대로 Open JDK는 오픈소스로 구현한 JDK이다. Open JDK는 개인과 기업 모두에게 무료이다. 정리하면 JDK는 개발자가 자바 프로그램을 제작할 수 있도록 도와주는 도구이다.

 

 

References

JDK, JRE, JVM : 자바를 공부하기 전에 알아두면 좋을 것들!! #1 (JDK, JRE, JVM 알아보기), https://www.youtube.com/watch?v=f0cAmTYo4tQ