ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JDK, JRE, JVM 이해하기
    프로그래밍/Java 2022. 4. 29. 22:39

    JVM (Java Virtual Machine)

    • 자바 가상 머신으로 자바 바이트 코드 (.class file) 를 OS에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행한다.
    • 바이트 코드를 실행하는 표준(JVM 자체는 표준)이자 구현체(특정 벤더가 구현한 JVM)이다. 
    • JVM 벤더: 오라클, 아마존 등
    • 특정 플랫폼에 종속적이다. 

     

    .java 파일을 컴파일하면 .class 파일이 생성되는데 해당 파일은 바이트 코드로 이루어져 있다.

    이후 바이트 코드(.class 파일)를 인터프리터와 JIT 컴파일러를 사용하여 해당 OS에 맞는 기계어로 변경한 후 실행되게 된다.

    (OS에 의존적이기 때문에 특정 플랫폼에 종속적인 것이다.)

    이 외에도 JVM 은 메모리 관리의 역할도 가지고 있다. 여러 밴더에 따라 구현은 다르지만 공통 스펙은 따르고 있다.

    JVM 은 바이트코드를 어떻게 실행할 수 있는지에 대한 스펙이고, 구현체는 다양하다. 

    또한 플랫폼에 종속적인데,  실행을 위해 네이티브 코드로 바꿔서 실행되어야 하는데 네이티브 코드라는 것이 OS에 맞춰 실행 되어야 하기 때문이다. 

     

    JVM 은 홀로 제공되지 않는다. 최소한의 배포단위가 JRE 이다. 

     

    JRE (Java Runtime Environment) 

    • JVM 과 라이브러리를 같이 제공하고 있다. 
    • 자바 애플리케이션을 실행할 수 있도록 구성된 배포판
    • JVM 과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 가지고 있다. 
    • 자바를 실행하는데 필요한 것들만 제공이 되며, 개발 관련 도구는 포함하지 않는다. (그건 JDK 에서 제공) 
    • 그렇기에 실제 JRE 폴더를 보면 javac (컴파일러)는 찾아볼 수 없다. 

     

    JDK (Java Development Kit) 

    • JRE + 개발에 필요한 툴
    • 소스 코드를 작성할 때 사용하는 자바 언어는 플랫폼에 독립적이다.
    • 오라클은 자바11부터는 JDK만 제공하며, JRE를 따로 제공하지 않는다. 
    • 개발을 해야하기 때문에 JDK 가 반드시 필요하며 JDK 를 받으면 JRE, JVM도 모두 포함되어 있다. 

     

    Java 

    • Java 와 JDK 는 구분해서 말해야한다. 
    • Java 는 프로그래밍 언어이다. 
    • JDK에 들어있는 자바 컴파일러(javac) 를 사용하여 바이트 코드(.class 파일)로 컴파일 할 수 있다. 
    • Java 유료화는 오라클에서 만든 Oracle JDK 11 버전부터 사용으로 사용할 때에만 유료이다.
      • 예를들어, 오라클에서 만든 혹은 다른곳에서 만든 Open JDK 11 는 무료이다. 
      • 이런 상황에서 Java 가 유료화 되었다고 말할 수 가 없다. 

     

    참고

    • 백기선 - 더 자바, 코드를 조작하는 다양한 방법

    '프로그래밍 > Java' 카테고리의 다른 글

    클래스 로더 (class loader)  (0) 2022.05.01
    JVM 구조  (0) 2022.04.30
    Java 8 Funtional 스터디  (0) 2021.09.23
    Inner class 정리  (1) 2021.09.10
    Interface  (0) 2021.08.22
Designed by Tistory.