Home (Java) JDK, JRE, JVM
Post
Cancel

(Java) JDK, JRE, JVM

JDK


JDK(Java Development Kit)는 자바 개발 도구의 약자입니다.

  • JDK는 JRE 외에 개발을 위해 필요한 도구(javac, java 등등)을 포함
  • 하는 일 중 가장 큰 역할이 컴파일러 역할을 할 수 있습니다. (javac.exe = java컴파일러, java.exe = JVM 구동 프로그램)
  • 사용자가 java소스(.java)를 만들었다. 기계어로 변경해야 기계가 실행합니다.
  • (.java)는 기계어로 변환하려면 과정을 거쳐야합니다.
    • 파일을 변환하기 위해 javac.exe가 도와줍니다. (.java) -> (.class)
    • 바이트 코드 파일(.class)로 컴파일 되어 변환 합니다.
    • 바이트 코드 파일이 실행되도록 java.exe가 도와줍니다. JVM을 구동시킵니다.
    • 바이트 코드가 컴파일되면서 그 뒤부터 JVM이 구동됩니다. (java.exe가 JVM을 구동시키기 위한 명령 프로그램 이라고 합니다.)
    • JVM을 거쳐 컴퓨터가 사용할 수 있는 기계언어로 변경해줍니다.

JRE


JRE(Java Runtime Environment)는 자바 실행환경의 약자입니다.

  • JVM이 구동할 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있습니다.
  • JRE는 JVM의 실행환경을 구축 (JVM의 조력자)

JVM


JVM(Java Virtual Machine)의 약자입니다.

  • JVM은 자바 소스코드로부터 만들어지는 자바 바이트 코드 파일(.class)를 실행할 수 있다.
  • JVM은 운영체제마다 다르다. (.class)파일을 OS에 맞는 기계코드로 변환. 그러나 한번 컴파일 된 코드는 서로 다른 JVM이라도 돌아가도록 만들었다.
    • 플랫폼에 종속적
    • Java 의 장점이 여기서 나옵니다.
    • JVM을 사용하면 하나의 바이트 코드(.class)로 모든 플랫폼에서 동작하도록 할 수 있습니다.
  • 참고
    • 바이트 코드: JVM 같은 가상 머신이 이해할 수 있는 코드 (.class). 사람이 쓰는 자바 코드에서 컴퓨터가 읽는 기계어로의 중간 단계
    • 바이너리 코드: CPU가 이해할 수 있는 코드

자바 프로그램의 실행 과정과 JVM


Untitled

  • 예를 들어 C언어로 작성된 Test.c가 있다고 해봅시다. 이 Test.c를 윈도우 컴파일러를 사용해서 컴파일하면 Test.exe가 만들어집니다.
  • 윈도우 컴파일러로 컴파일되었기에 Test.exe는 윈도우에서만 실행되는 실행 파일입니다. 리눅스 운영체제에서는 실행할 수 없습니다. 즉 C / C++에서는 컴파일 플랫폼과 타겟 플랫폼이 다를 경우에는 프로그램이 동작하지 않습니다.
  • 만약 이 Test.exe 파일을 리눅스 운영체제에서 실행하려면 리눅스 환경을 타겟으로 크로스 컴파일을 해서 리눅스 운영체제에 맞는 실행 파일을 새로 만들어야 하는 것입니다.

Untitled

  • Java의 경우에는 Java언어로 작성된 Test.java는 컴파일하면 Test.class 파일이 생성됩니다. 그리고 이렇게 생성된 바이트 코드는 각자의 플랫폼에 설치되어 있는 자바 가상 머신(JVM)이 운영체제에 맞는 실행 파일로 바꿔줍니다.
  • 즉 Java에서는 C언어와는 달리 JVM을 사용하기 때문에 각자의 플랫폼에 맞게끔 컴파일을 따로따로 해줘야 할 필요가 없습니다.
  • 하나의 바이트 코드로 JVM이 설치되어 있는 모든 플랫폼에서 동작이 가능하다는 이야기입니다.
  • Java는 플랫폼에 종속적이지 않지만 JVM은 플랫폼에 종속적이다.

Untitled

  • 우리가 자바로 (.java) 코드를 작성하고 파워쉘이나 터미널에 있는 자바 컴파일러인 javac에 컴파일 명령을 내리면 (.class) 파일이 만들어집니다.
  • 이후 이 바이트 코드는 클래스 로더를 통해 JVM Runtime Data Area로 로딩되고, 로딩된 .class 바이트 코드를 실행할 컴퓨터에 깔린 JVM에 가져다주면 그 컴퓨터가 이 프로그램을 실행할 때 이 JVM이 그때그때 기계어로 해석합니다.

정리


  • JDK > JRE > JVM
  • JDK = 개발 환경(+컴파일)  /  JRE = 실행 환경 구축  /  JVM = 실행
  • 간단한 실행 순서
    • 사용자 Java 코드 생성 → JDK컴파일 (.class 파일 생성) → JVM → 실행
    • (.java) → javac → (.class) → jvm → process

Reference

  1. https://aws.amazon.com/ko/what-is/java-runtime-environment/
This post is licensed under CC BY 4.0 by the author.