본문 바로가기

언어/Java

[ 자바 / Java ] JVM의 구조와 특징

반응형

반응형

1. Java Virtual Machine (JVM)의 구조와 기능

Java Virtual Machine (JVM)은 자바 프로그램을 실행하기 위한 가상 머신입니다. JVM은 자바의 "한 번 작성하면 어디서나 실행된다(Write Once, Run Anywhere)"는 철학을 구현하는 핵심 요소입니다. 다음은 JVM의 주요 구성 요소와 작동 방식에 대한 설명입니다:

2. JVM의 주요 구성 요소

  1. 클래스 로더 시스템 (Class Loader System):
    • 자바 프로그램의 클래스를 로드하고 링크합니다.
    • 로드된 클래스를 JVM 내부에 적재하여 사용할 수 있도록 합니다.
    • 이 과정은 런타임에 발생하며, 동적 로딩을 통해 필요할 때만 클래스를 로드합니다.
  2. 실행 엔진 (Execution Engine):
    • JVM이 자바 바이트코드를 실행하는 핵심 부분입니다.
    • 주요 구성 요소는 다음과 같습니다:
      • 인터프리터 (Interpreter): 바이트코드를 한 줄씩 읽고 해석하여 실행합니다. 즉시 실행 가능하지만, 성능이 떨어질 수 있습니다.
      • JIT 컴파일러 (Just-In-Time Compiler): 인터프리터의 성능 문제를 해결하기 위해, 반복 실행되는 바이트코드를 네이티브 머신 코드로 변환합니다. JIT 컴파일된 코드는 성능이 높아집니다.
      • 가비지 컬렉터 (Garbage Collector): 메모리 관리를 담당하며, 더 이상 참조되지 않는 객체를 자동으로 회수하여 메모리 누수를 방지합니다.
  3. 메모리 영역 (Runtime Data Area):
    • JVM이 프로그램을 실행하는 동안 사용하는 메모리 영역입니다.
    • 주요 구성 요소는 다음과 같습니다:
      • 메서드 영역 (Method Area): 클래스 정보, 메서드 정보, 상수 풀 등을 저장합니다.
      • 힙 (Heap): 동적으로 생성된 객체와 배열을 저장하는 영역입니다.
      • 스택 (Stack): 메서드 호출과 관련된 프레임을 저장하며, 각 프레임은 지역 변수, 연산 스택 및 메서드 실행 상태를 포함합니다.
      • 프로그램 카운터 (PC Register): 현재 실행 중인 명령의 주소를 가리킵니다.
      • 네이티브 메서드 스택 (Native Method Stack): JVM이 호출하는 네이티브 메서드(C나 C++로 작성된 메서드)의 정보를 저장합니다.
  4. 네이티브 인터페이스 (Native Interface):
    • 자바 프로그램이 네이티브 코드 (운영체제의 기능이나 라이브러리 함수)를 호출할 수 있도록 합니다.
    • 자바 네이티브 인터페이스 (JNI)를 통해 네이티브 메서드를 호출합니다.
  5. 네이티브 메서드 라이브러리 (Native Method Libraries):
    • 네이티브 인터페이스를 통해 호출되는 라이브러리입니다.
    • 자바 프로그램이 기본 운영 체제 기능에 접근할 수 있도록 합니다.

3. JVM 구조를 나타낸 그림

4. JVM의 작동 방식

  1. 소스 코드 컴파일:
    • 자바 소스 파일 (.java)은 자바 컴파일러(javac)에 의해 바이트코드 (.class 파일)로 컴파일됩니다.
  2. 클래스 로딩:
    • JVM의 클래스 로더 시스템이 바이트코드 파일을 읽고 JVM의 메모리로 로드합니다.
  3. 바이트코드 실행:
    • 실행 엔진이 로드된 바이트코드를 실행합니다.
    • 인터프리터가 바이트코드를 한 줄씩 실행하거나, JIT 컴파일러가 자주 실행되는 코드를 네이티브 코드로 변환하여 실행 속도를 높입니다.
  4. 메모리 관리:
    • 실행 중에 JVM의 가비지 컬렉터가 사용되지 않는 메모리를 회수하여 효율적인 메모리 사용을 보장합니다.
  5. 네이티브 코드 호출:
    • 자바 애플리케이션이 네이티브 코드를 필요로 하면, 네이티브 인터페이스를 통해 네이티브 메서드를 호출합니다.

JVM은 이러한 구성 요소들과 작동 방식을 통해 자바 애플리케이션의 실행을 지원하며, 다양한 플랫폼에서 동일한 코드가 실행될 수 있도록 합니다.

반응형