JAVA

JDK/JRE/JVM 개념

국자집사 2024. 10. 14. 15:41

[ 목차 ]

    JDK, JRE, JVM의 개념과 역할

    • JDK(Java Development Kit): Java 애플리케이션 개발 및 실행을 위한 소프트웨어 개발 키트. 개발 도구와 JRE를 포함.
    • JRE(Java Runtime Environment): Java 애플리케이션을 실행하기 위한 환경. JVM과 표준 라이브러리를 포함.
    • JVM(Java Virtual Machine): Java 바이트코드를 실행하는 가상 머신. 플랫폼 독립성을 실현하는 핵심 요소.


    JDK(Java Development Kit)

    JDK의 정의와 역할

    JDK는 Java 애플리케이션을 개발하고 실행할 수 있는 도구 모음이다. Java 프로그램을 작성, 컴파일, 디버깅 및 실행하는 데 필수적인 도구다.

     

    JDK의 버전 표기

    • JDK는 버전 번호로 구분된다. 예: JDK 8, JDK 11, JDK 17.
    • LTS(Long-Term Support): JDK 8, 11, 17은 장기 지원(LTS) 버전으로 기업에서 주로 사용다.

    JDK 디렉토리 구성요소

    1. bin : 자바 개발, 실행에 필요한 도구와 유틸리티 명령, javac(컴파일러), java(런처) 등 실행 파일.
    2. lib : 클래스 라이브러리와 리소스 파일.
    3. include : 네이티브 코드 프로그래밍에 필요한 C/C++ 헤더 파일.

    JDK와 JRE의 호환성

    • JDK와 JRE 간의 호환성은 JDK가 제공하는 컴파일러 버전에 따라 달라질 수 있다.
    • JDK 17에서 컴파일된 코드를 JRE 8에서 실행하려면 javac --release 8과 같은 옵션을 사용하여 호환성을 유지해야 한다.

     


    JRE(Java Runtime Environment)

    JRE의 정의와 역할

    JRE는 Java 애플리케이션 실행 환경의 약자이다. JVM과 표준 라이브러리를 포함하며, Java 프로그램을 실행하는 데 필요한 모든 요소를 제공한다. 이외에도 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일(jar 파일)을 가지고 있다.

    JRE는 기본적으로 JDK에 포함되어 있기 때문에 JDK를 설치하면 함께 설치된다.

     

    JDK와 JRE의 차이

    특징 JDK JRE
    역할 개발과 실행 실행만 가능
    구성 요소 JRE 포함, 컴파일러, 디버거 JVM과 클래스 라이브러리
    대상 사용자 개발자 일반 사용자
     

    JVM(Java Virtual Machine)

    JVM의 정의와 필요성

    JVM은 Java 바이트코드를 실행하는 가상 머신이다. JVM은 Java의 플랫폼 독립성을 실현하며, 자바 프로그램을 실행하기 위해서는 반드시 자바 가상 머신이 설치되어 있어야 한다,

    1. 플랫폼 독립성 제공: 운영체제와 무관하게 Java 프로그램 실행 가능.
    2. 메모리 관리: 자동으로 메모리를 할당하고 Garbage Collection으로 회수.
    3. 보안: Java 프로그램을 안전하게 실행.
    4. C 언어와의 비교:
      • C 언어는 컴파일 시 운영체제에 종속된 기계어로 변환되기 때문에 플랫폼 종속적이다.
      • Java는 JVM 위에서 바이트코드를 실행하므로 플랫폼 독립성을 가진다. 이는 한 번 작성한 코드가 여러 환경에서 실행될 수 있는 장점을 제공다.

     

    JVM의 내부 구조

    1. 클래스 로더(Class Loader):
      • Java 프로그램 실행 시 필요한 클래스를 메모리에 로드.
      • 부트스트랩 로더, 확장 로더, 애플리케이션 로더로 구성.
    2. 실행 엔진(Execution Engine):
      • 인터프리터: 바이트코드를 한 줄씩 실행.
      • JIT(Just-In-Time) 컴파일러: 바이트코드를 네이티브 코드로 변환하여 실행 속도 향상.
    3. 메모리 영역:
      • 메소드 영역(Method Area): 클래스 메타데이터 저장.
      • 힙(Heap): 객체와 인스턴스 변수 저장.
        • Young Generation: 새롭게 생성된 객체가 저장되는 영역.
        • Old Generation: Young Generation에서 오래 살아남은 객체가 이동.
        • Metaspace: 클래스 메타데이터 저장.
      • 스택(Stack): 메소드 호출과 지역 변수 저장. 각 스레드마다 독립적으로 할당.
      • PC 레지스터: 현재 실행 중인 명령어 주소 저장.
      • 네이티브 메소드 스택: 네이티브 코드 호출 관리.

    JVM의 플랫폼 독립성을 보장하는 원리

    • Java 소스 코드는 바이트코드로 컴파일된다.
    • JVM은 각 운영 체제에 맞는 네이티브 코드를 생성하여 실행.

     


    자바 프로그램의 실행 과정

    Java 프로그램이 실행되는 과정

    1. 소스 코드 작성: .java 파일 생성.
    2. 컴파일: javac를 사용하여 Java 소스 코드를 바이트코드(.class 파일)로 변환.
    3. 클래스 로딩: JVM의 클래스 로더가 .class 파일을 메모리에 로드.
    4. 바이트코드 실행:
      • 인터프리터 또는 JIT 컴파일러가 바이트코드를 네이티브 코드로 변환.
      • 실행 엔진이 네이티브 코드를 실행.
    5. 메모리 관리: JVM이 Garbage Collection으로 메모리 회수.

    .java → javac → .class → JVM → 실행

     

    자바 프로그램의 실행 속도와 JIT 컴파일

    • Java 프로그램은 인터프리터를 통해 실행되므로 초기 실행 속도가 C 언어에 비해 느릴 수 있다.
    • 이러한 단점을 보완하기 위해 JIT(Just-In-Time) 컴파일러가 도입되었다.
      • JIT 컴파일러는 자주 실행되는 코드를 네이티브 코드로 변환하여 실행 속도를 최적화한다.

    클래스 로더 체계

    • 부트스트랩 로더: 표준 라이브러리 클래스 로드.
    • 확장 로더: 사용자 지정 확장 클래스 로드.
    • 애플리케이션 로더: 애플리케이션 클래스 로드.

    JIT 컴파일과 인터프리터

    • 인터프리터 : 바이트코드를 한 줄씩 실행하여 빠르게 시작. 하지만 같은 메소드라도 여러 번 호출이 된다면 매번 해석하고 수행해야 되서 전체적인 속도는 느리다.
    • JIT 컴파일러 : 인터프리터의 단점을 보완하기 위해 도입된 방식, 자주 실행되는 코드를 네이티브 코드로 변환하여 실행 속도 최적화.

     


    Garbage Collection 소개

    Garbage Collection(GC)은 Java의 자동 메모리 관리 시스템이다. GC는 더 이상 참조되지 않는 객체를 힙 메모리에서 제거하여 메모리를 효율적으로 관리다.

     

    GC 안에서의 역할

    • Young Generation: 새로 생성된 객체를 관리하며, Minor GC가 주기적으로 실행.
    • Old Generation: 오래된 객체를 관리하며, Major GC가 실행.

    Stop-the-World 이벤트

    GC가 실행될 때 JVM은 모든 애플리케이션 스레드를 멈추고 메모리를 정리합니다. 이 과정은 짧지만, 성능에 영향을 줄 수 있다.


    JDK, JRE, JVM의 관계

    JDK, JRE, JVM은 서로 밀접하게 연결되어 있다:

    • JDK: 개발 도구와 함께 JRE를 포함.
    • JRE: JVM과 클래스 라이브러리를 포함.
    • JVM: 바이트코드를 실행하여 플랫폼 독립성을 제공.

     


     

    출처

    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

     

    ☕ JDK / JRE / JVM 개념 & 구성 원리 💯 총정리

    자바를 처음 설치하면 C:\Program Files\Java 폴더에 아래와 같이 JDK와 JRE 가 각각 설치되는 것을 볼 수 있다. 그렇다면 이 JDK와 JRE의 역할은 무엇인지 그리고 자바 프로그램(JVM)은 어떤식으로 돌아가

    inpa.tistory.com

    https://kylo8.tistory.com/entry/JAVA-JDK-JRE-JVM-%EC%B0%A8%EC%9D%B4-%EB%B0%8F-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

     

    [JAVA] JDK, JRE, JVM 차이 및 개념 이해하기

    JDK (Java Development Kit)JDK는 자바 개발 키트의 약자로 개발자들이 자바로 개발하는 데 사용되는 SDK 키트이다.📌 SDK 란 Software Development Kit의 약자로, 소프트웨어 개발을 위해 도구와 라이브러리, 문

    kylo8.tistory.com

    https://pienguin.tistory.com/entry/JAVA-%EC%9E%90%EB%B0%94-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%8B%A4%ED%96%89-%EA%B3%BC%EC%A0%95-%EB%B0%8F-%EA%B8%B0%EB%B3%B8-%EA%B5%AC%EC%A1%B0

     

    [JAVA] 자바 프로그램 실행 과정 및 기본 구조

    1. 자바 프로그램 실행 과정 1.1. JVM 2. 자바의 기본 구조 3. 자바 프로그램 분석 1. 자바 프로그램 실행 과정 Java언어로 프로그래밍된 파일을 Java컴파일러가 가상 기계어 파일인 Java클래스 파일로

    pienguin.tistory.com

     

    'JAVA' 카테고리의 다른 글

    자바 컬렉션 프레임워크  (0) 2024.12.10
    Enum이란?  (1) 2024.11.01
    오버로딩 vs 오버라이딩  (7) 2024.10.23
    자바에서의 Error & Exception  (0) 2024.10.21
    추상 클래스 vs 인터페이스  (0) 2024.10.14