[공부/Java] JVM, JRE, JDK

2022. 12. 24. 02:50·공부/Java

Java


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

  • 각기 다른 플랫폼에 설치해 동일한 자바 실행 환경을 만들어주는 소프트웨어
  • Java는 JVM 덕분에 플랫폼에 종속적이지 않지만, JVM 자체는 플랫폼에 종속적이라 운영체제에 맞는 JVM을 설치해줘야 함
  • 응용 프로그램을 구성하는 클래스 파일(.class)의 바이트 코드를 JVM 환경에서 실행
  • JVM은 자바 실행 환경인 JRE에 포함되어 있어 현재 사용하는 컴퓨터 운영체제에 맞는 자바 JRE가 설치되어 있다면 자바 가상 머신이 설치되어 있다는 의미

JVM을 사용함으로써 하나의 바이트 코드(.class)로 모든 플랫폼에서 동작할 수 있다는 것이 가장 큰 장점이다!

JVM 동작 방식

1. 자바로 개발된 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당

2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일

3. Class Loader를 통해 JVM Runtime Data Are로 로딩

4. Runtime Data Area에 로딩된 .class들을 Execution Engine을 통해 해석

5. 해석된 바이트코드는 Runtime Data Area의 각 영역에 배치되어 수행하며 이 과정에서 Execution Engine에 의해 GC의 작동과 스레드 동기화가 이루어짐

 

동작 방식은 아래 JVM의 구조 포스팅을 참고!

 

[공부/Java] JVM 구성 - Class Loader, Execution Engine, Garbage Collector

JVM의 구성요소 Class Loader Class Loader는 바이트코드(.class)를 읽어들여서 클래스 객체를 생성하는 역할을 담당한다. class 로딩은 Run-Time에 일어난다. 개발자가 new라는 예약어로 객체를 생성하는 코드

yulee.tistory.com

JDK (Java Development Kit) 

자바 개발 키트로 개발자들이 자바로 개발을 하는데 사용된다.

자바 응용 개발 환경으로 컴파일러, 디버거, JRE 등 개발에 필요한 도구들이 포함되어 있다. 

JDK의 bin 디렉토리에 대표적으로 javac, java 등의 개발 도구들이 들어있다.

개발을 위해 실행도 시켜줘야 하기 때문에 JRE도 포함되어 있다.

 

bin 디렉터리에 들어 있는 주요한 개발 소프트웨어

  • javac : 자바 컴파일러 
  • java : 자바 프로그램 실행기, JVM을 작동시켜 자바 프로그램 실행
  • javadoc : 자바 소스로부터 HTML 형식의 API 문서 생성
  • jar : 자바 클래스 파일을 압축한 자바 아카이브 파일(.jar) 생성, 관리
  • jmod : 자바의 모듈 파일(.jmd)을 만들거나 모듈 파일의 내용 출력
  • jlink : 응용 프로그램에 맞춘 맞춤형 JRE 생성
  • jdb : 자바 응용프로그램의 실행 중 오류를 찾는 데 사용하는 디버거
  • javap : 클래스 파일의 바이트 코드를 소스코드와 함께 보여주는 디어셈블러 

JRE (Java Runtime Environment)

자바 실행 환경으로 자바로 만들어진 프로그램을 실행시키는데 필요한 라이브러리들과 각종 API, 그리고 JVM이 포함되어 있다.

JRE는 자바로 개발은 안되고 실행만 된다.

 

사용자 디렉터리 구성요소 

  • bin : 자바 개발, 실행에 필요한 도구와 유틸리티 명령
  • conf : 여러 종류의 패치 파일
  • include : 네이티브 코드 프로그래밍에 필요한 C 언어 헤더 파일
  • jmods : 컴파일된 모듈 파일들
  • legal : 각 모듈에 대한 저작권과 라이선스 파일
  • lib : 실행시간에 필요한 라이브러리 클래스들 

참고자료:

https://coding-factory.tistory.com/826

728x90

'공부 > Java' 카테고리의 다른 글

[공부/Java] Runtime Data Area  (0) 2022.12.28
[공부/Java] static이란?  (0) 2022.12.28
[공부/Java] JVM 구성 - Class Loader, Execution Engine, Garbage Collector  (0) 2022.12.24
[공부/Java] 자바의 main() 메소드, 예외, 예외 처리, try-catch-finally, 예외 클래스  (0) 2022.07.11
[공부/Java] 자바의 배열, 선언, 생성, 초기화, 인덱스, 치환, 공유, 크기, for-each문, 리턴  (0) 2022.07.11
'공부/Java' 카테고리의 다른 글
  • [공부/Java] Runtime Data Area
  • [공부/Java] static이란?
  • [공부/Java] JVM 구성 - Class Loader, Execution Engine, Garbage Collector
  • [공부/Java] 자바의 main() 메소드, 예외, 예외 처리, try-catch-finally, 예외 클래스
yulee_to
yulee_to
  • yulee_to
    yulee
    yulee_to
  • 전체
    오늘
    어제
    • 전체 글 (107)
      • CS (2)
        • OS (0)
        • DB (0)
        • Network (2)
      • 공부 (21)
        • Spring (9)
        • Java (12)
        • Python (0)
        • 알고리즘 (0)
        • 기타 (0)
      • 백준 (39)
        • C++ (39)
        • Java (0)
      • 도서 (39)
        • 자바의 신 (32)
        • 스프링 입문을 위한 자바 객체 지향의 원리와 이해 (7)
      • 기타 (4)
        • Blog (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    다이나믹프로그래밍
    스터디
    DP
    Java
    자바
    다익스트라
    C++
    백준
    GodOfJava
    1일1백준
    객체지향
    boj
    스프링 입문
    위상정렬
    알고리즘
    aws
    EC2
    Spring
    자바의 신
    문제풀이
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
yulee_to
[공부/Java] JVM, JRE, JDK
상단으로

티스토리툴바