JAVA

JVM, JDK, JRE 의 차이, JVM의 동작방식

경딩 2025. 3. 23. 23:56

자바 JVM, JDK, JRE 의 차이가 무엇인지 확인해보자

https://inpa.tistory.com/entry/JAVA-%E2%98%95-JDK-JRE-JVM-%EA%B0%9C%EB%85%90-%EA%B5%AC%EC%84%B1-%EC%9B%90%EB%A6%AC-%F0%9F%92%AF-%EC%99%84%EB%B2%BD-%EC%B4%9D%EC%A0%95%EB%A6%AC

 

JVM (Java Virtual Machine)

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

 

JRE (Java Runtime Environment) : JVM + 라이브러리

  • 자바 애플리케이션을 실행 할 수 있는 배포판.
    • jre 배포판의 목적은 자바 애플리케이션을 실행하는 것이다. 실행을 하기 위해 바이트 코드를 변환하는 jvm 과 java 의 핵심 lib 가 들어있다.
  • JVM 과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일을 가지고 있다.
  • 개발 관련 도구는 포함하지않는다. (그건 JDK 에서 제공)

 

JDK(Java Development Kit) : JRE + 개발 툴

  • JRE + 개발에 필요한 툴
  • 소스 코드를 작성할 때 사용하는 자바 언어는 플랫폼에 독립적
  • 오라클은 자바 11부터는 JDK 만 제공하며 JRE 를 따로 제공하지 않는다.
  • Write Once Run Anywhere

자바

  • 프로그래밍 언어
  • JDK 에 들어있는 자바 컴파일러(javac) 를 사용하여 바이트코드(.class 파일) 로 컴파일 할 수 있다.
  • 오라클에서 만든 Oracle JDK 11 버전부터 상용으로 사용할 때 유료.

 

JVM 언어

  • JVM 기반으로 동작하는 프로그래밍 언어
  • 클로저, 그루비, JRuby, Jython, Kotlin, Scala, ...

자바 가상 머신 (JVM) 의 동작방식

자바 가상 머신인 JVM 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 자바 API 와 함께 실행하는 것이다.

다음은 자바 소스 파일을 어떤 동작으로  코드를 읽는지에 대한 간단한 요약 도식이다.

  1. 자바 프로그램을 실행하면 JVM 은 OS 로부터 메모리를 할당받는다.
  2. 자바 컴파일러(javac) 가 자바 소스(.java) 를 자바 바이트 코드(.class) 로 컴파일한다.
  3. Class Loader 는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 Runtime Data Area(실질적인 메모리를 할당받아 관리하는 영역) 에 올린다.
  4. Runtime Data Area 에 로딩 된 바이트 코드는 Execution Engine 을 통해 해석된다.
  5. 이 과정에서 Excution Engine 에 의해 Garbage Collector 의 작동과 Thread 동기화가 이루어진다.

 

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package hello;

public class Hek {
    public Hek() {
    }

    public void work() {
        System.out.println(App.myName); // 초기화된 값 바로 사용 가능
    }
}

 

컴파일된 바이트 코드를 확인해보자.

javap -c Hello.class 

Java 바이트코드를 디컴파일하여 기계어 수준의 명령어(바이트코드)를 출력하는 명령어입니다.

 

 

 

참고자료 : https://inpa.tistory.com/entry/JAVA-%E2%98%95-JVM-%EB%82%B4%EB%B6%80-%EA%B5%AC%EC%A1%B0-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD-%EC%8B%AC%ED%99%94%ED%8E%B8

'JAVA' 카테고리의 다른 글

바이트코드 조작  (0) 2025.03.24
클래스 로더란?  (0) 2025.03.24
네트워크 - 프로그램1  (1) 2025.01.29
자바 - IO 기본 (buffer)  (1) 2025.01.28
자바 - IO 기본 (InputStream, OutputStream)  (1) 2025.01.28