[Java] JVM

thingzoo·2024년 3월 15일
0

Java

목록 보기
2/20
post-thumbnail

JVM(Java Virtual Machine)

  • 가상 머신이란 프로그램을 실행하기 위해 물리적인 머신과 유사한 머신을 소프트웨어로 구현한 것
    • 즉, 여러가지의 기기위에 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어주는 것
  • JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것

JVM의 특징

  • 컴파일된 바이트 코드(.class파일)를 기계가 이해할 수 있는 기계어로 변환
  • 스택 기반의 가상 머신
  • 메모리 관리와 GC를 수행

JVM 구조

클래스 로더(Class Loader)🚚

JVM으로 class(바이트 코드)를 불러와서 메모리영역에 저장

실행 엔진(Execution Engine)📇

.class파일과 같은 바이트 코드를 기계어로 번역해 실행

인터프리터(Interpreter)

운영체제가 읽은 바이트 코드를 기계어로 번역

JIT 컴파일러(Just-In-Time Compiler)

인터프리터의 효율을 높이기 위한 컴파일러

  • 인터프리터가 반복되는 코드를 발견하면, JIT 컴파일러가 반복되는 코드를 네이티브 코드로 바꿔줌

GC(Garbage Collector)🗑️

Heap 영역에 참조되지 않는 객체들을 제거해주는 모듈

메모리 영역(Runtime Data Area)🗂️

운영체제로부터 JVM이 할당받은 메모리 영역

  • 런타임 시, 클래스 데이터와 같은 메타 데이터와 실제 데이터가 저장되는 곳

PC Register

Thread가 시작될 때 생성되며 현재 수행 중인 JVM 명령의 주소를 갖고 있음

  • JVM은 스택 기반의 가상 머신으로, CPU에 직접 접근하지 않고 Stack에서 주소를 가져와 PC Register에 저장

Stack Area

지역 변수, 파라미터 등이 저장되는 영역

  • 실제 객체는 Heap에 할당되고 해당 레퍼런스만 Stack에 저장됨

Heap Area

동적으로 생성된 오브젝트와 배열이 저장되는 곳으로 GC의 대상 영역

Method Area

클래스 정보를 처음 메모리에 올릴 때 초기화되는 대상을 저장하기 위한 영역

  • 클래스 멤버 변수, 메소드 정보, Type 정보, Constant Pool, static, final 변수 등
  • 상수 풀(Constant Pool)은 모든 Symbolic Reference를 포함

JVM의 실행방식

  1. 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어 자바 바이트코드(.class)로 변환시킵니다.
  2. Class Loader를 통해 class 파일들을 JVM으로 로딩합니다.
  3. 로딩된 class파일들은 Execution engine을 통해 해석됩니다.
  4. 해석된 바이트코드는 Runtime Data Areas에 배치되어 실질적인 수행이 이루어집니다

단계별 산출물
개발자가 읽을 수 있는 Java 코드들(.java 파일)
(컴파일러 후)
운영체제가 읽을 수 있는 바이트 코드(.class 파일)
(실행엔진 후)
기계가 읽을 수 있는 기계어

profile
공부한 내용은 바로바로 기록하자!

0개의 댓글