java_JDK,JRE,JVM

황호준·2023년 5월 21일

CS

목록 보기
8/29

JDK,JRE,JVM

JDK (Java Development Kit) : 자바로 개발하는 데 사용되는 SDK 키트

  • 자바 개발 시 필요한 라이브러리들과 javac,Javadoc 등의 개발 도구들을 포함하며 자바 프로그램을 실행을 위한 JRE도 포함

JRE : 자바 프로그램을 실행시킬 때 필요한 라이브러리 API를 함께 묶어서 배포되는 패키지

  • 기본적으로 JDK 설치시 함께 설치된다.

JVM : 자바를 돌리는 프로그램

  • 자바로 작성된 모든 프로그램은 JVM에서만 실행되고, 이 때문에 자바 프로그램을 모든 플랫폼에서 제약 없이 동작 할 수 있고, 이는 OS에 종속적이지 않게 된다,

컴파일 과정

  1. 개발자가 자바 소스코드 작성
  2. 자바 컴파일러가 자바 소스파일 컴파일(자바 가상 머신이 이해할 수 있는 코드-클래스 파일)
  3. 컴파일된 바이트 코드를 JVM의 클래스 로더에게 전달
  4. 클래스 로더는 동적로딩을 통해 JVM 메모리에 올림
  • 클래스 로더 세부동작
    1.로드 : 클래스 파일을 가져와서 JVM의 메모리에 로드
    2.검증 : 자바 언어 명세 및 JVM 명세에 명시된 대로 구성되어 있는지 검사
    3.준비 : 클래스가 필요로 하는 메모리 할당.(필드,메서드,인터페이스 등등)
    4.분석 : 클래스의 상수 풀 내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경
    5.초기화 : 클래스 변수들을 적절한 값으로 초기화
  1. 실행엔진 : JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행하며 이때, 실행 엔진은 두가지 방식(인터프리터,JIT 컴파일러)

컴파일 언어 vs 인터프리터 언어


JVM 메모리 구조

  1. 자바로 개발된 프로그램을 실행하면 JVM은 OS로부터 메모리 할당
  2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일
  3. Class Loader를 통해 JVM Runtime Data Area로 로딩
  4. Runtime Data Area에 로딩 된 .class들은 Execution Engine을 통해 해석
  5. 해석된 바이트 코드는 Runtiome Data Area의 각 영역에 배치되어 수행하며 이 과정에서 Execution Engine에 의해 GC의 작동과 스레드 동기화가 이루어짐
  • 클래스 로더(Class Loader) : 자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야 모든 코드가 자바 가상 머신과 연결된다. 이렇게 동적으로 클래스를 로딩해주는 역할을 하는 것이 클래스 로더
  • 실행 엔진(Execution Engine) : 로드된 바이트코드를 실행하는 런타임 모듈이 실행 엔진(Execution Engine)
  • 가비지 컬렉터(Garbage Collector) : 더 이상 사용하지 않는 메모리를 자동으로 회수 Heap 메모리 영역에 생성된 객체들 중에 참조되지 않은 객체들을 탐색 후 제거

Java 8 특징 vs java 11과의 차이점

profile
기록 블로그

0개의 댓글