공부 기록/개념정리

JVM (자바 가상 머신)

코딩걈자 2024. 3. 30. 19:49

JVM(Java Virtual Machine)

  • 자바 가상머신, 자바 어플리케이션을 실행하는 가상 머신
  • 자바와 OS사이의 중개자 역할, OS에 구애받지 않고 독립적으로 작동이 가능하도록 함
  • 인터프리터와 JIT컴파일러를 통해 바이트 코드를 각 운영체제에 맞는 기계어로 해석시켜 실행
  • 메모리 관리, 가비지 컬렉션을 수행
    • 가비지 컬렉션 (Garbage Colleciton) : 유효하지 않은 메모리인 가비지를 정리하여 메모리를 정리하는 것
  • 스택기반 => 독립적으로 사용할 수 있도록

1) Class Loader (클래스 로더)

  • 클래스파일을 Runtime Data Area의 메서드 영역으로 불러오는 역할

2) Execution Engine (실행 엔진)

  • 클래스 파일을 실행 가능하도록 해석

3) Runtime Data Area

  • 런타임 시, 클래스 데이터와 같은 메타 데이터와 실제 데이터가 저장되는 곳
  • OS로부터 할당받은 메모리 영역
  • JVM을 생성하면 Heap, Method Area는 모든 스레드가 공유하고, 각 스레드가 시작될 때 마다 PC Register, Stack,Native Method Stack이 생성되고 종료될때 사라짐

(1) Heap

  • 객체를 동적으로 생성하게 되면 인스턴스가 Heap 영역의 메모리에 할당
  • GC의 대상이 되는 영역

(2) Method Area

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

(3) Thread

  • PC Register
    • JVM은 스택기반의 가상머신으로, CPU에 직접 접근하지 않고 Stack에서 주소를 뽑아서 가져오고 이 주소를 PC Register에 저장
    • 현재 어떤 명령을 실행해야 할 지 기록(현재 실행중인 명령어의 주소를 저장)
  • Native Method Stack
    • Java이외의 언어에 제공되는 Method의 정보가 저장
  • JVM Stacks
    • 호출된 메서드의 파라미터, 지역 변수, 리턴값 등이 저장되는 영역 ( 함수의 호출과 반환을 담당)
    • 프로그램 실행 시 임시로 할당되었다가 메서드를 빠져나가면 소멸

자바프로그램 실행 과정

  1. 프로그램이 실행되면 JVM은 OS로부터 필요한 메모리를 할당 받음
  2. JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리
  3. 자바 컴파일러(javac)가 소스코드를 읽어 자바 바이트코드(.class)로 변환 = 컴파일링
  4. Class Loader를 통해 class파일들을 JVM에 로딩
  5. 로딩된 파일들은 Execution engine을 통해 해석
  6. 해석된 코드는 Runtime Data Areas에 배치되고 수행

반응형