[디자인 패턴] 1. JVM

lhs's avatar
Nov 13, 2024
[디자인 패턴] 1. JVM
 

1. JVM이란?

  • Java Virtual Machine(자바 가상 머신)의 약자로 자바 프로그램이 실행되는 환경을 제공하는 소프트웨어이다.
  • 자바 프로그램을 실행할 때 자바 바이트코드(.class 파일)를 기계어로 변환해 실행할 수 있도록 한다.
  • 자바 애플리케이션을 운영체제에 맞게 실행할 수 있게 만들어 주는 추상화 계층 역할을 하여 운영체제와 하드웨어에서 독립적으로 실행될 수 있도록 한다.
 

2. JVM 구성요소

notion image
 
  1. Class Loader(클래스 로더)
      • 클래스 로더는 클래스 파일을 동적으로 메모리에 로드하는 역할을 한다.
      • 로딩, 링크, 초기화 과정으로 나누어진다.
  1. Runtime Data Area(런타임 데이터 영역)
    1. Method Area(메서드 영역)
        • 프로그램의 클래스 정보, 상수, 정적 변수, 정적 메서드 등을 저장하는 영역
        • 프로그램은 메서드 영역에 저장된 바이트 코드를 하나씩 실행하는 방식으로 흐른다.
    2. Heap Area(힙 영역)
        • 객체와 배열을 동적으로 할당하는 영역
        • GC(가비지 컬렉터)에 의해 관리된다.
    3. Stack Area(스택 영역)
        • 메서드 호출과 관련된 정보(지역 변수, 매개 변수, 리턴 주소 등)을 저장하는 영역
        • 메서드가 호출되거나 변수가 선언될 때 스택에 생성되고 메서드가 종료되면 제거된다.
        • 쓰레드마다 독자적인 영역을 가지고 있다.
    4. PC register(Program Counter Register)
        • 현재 실행 중인 명령어의 주소를 저장하는 영역
        • 메서드를 실행할 때, PC register를 사용하여 현재 어떤 명령어를 실행할지 추척한다.
        • 쓰레드마다 독자적인 영역을 가지고 있다.
    5. Native Method Stack(네이티브 메서드 스택)
        • 자바의 네이티브 메소드 호출을 위한 스택
        • 네이티브 메소드를 호출할 때, 해당 메소드에 필요한 로컬 변수와 리턴 값을 저장하는데 사용된다.
        • 네이티브 메소드를 호출하면 네이티브 메서드 스택에 메모리가 할당된다.
  1. Garbage Collecter(가비지 컬렉터)
      • 더 이상 참조되지 않는 객체를 자동으로 제거하여 메모리를 관리한다.
      • 자주 사용되는 객체와 사용하지 않는 객체를 구분하여, 메모리를 최적화한다.
  1. Execution Stack(실행 엔진)
      • 바이트코드를 실제로 실행하는 역할을 한다.
      • JIT(Just-In-Time) 컴파일러를 사용하여 실행중인 코드를 네이티브 코드로 변환하여 실행한다.
Share article

LHS's Study Space