지금을 사는 사람

[Java] JVM (Java Virtual Machine) 본문

Java

[Java] JVM (Java Virtual Machine)

지금회 2023. 12. 12. 12:50
728x90

 

소개:

Java Virtual Machine (JVM)은 Java 언어로 작성된 프로그램을 실행하기 위한 핵심 컴포넌트로, 프로그램의 이식성과 보안을 강화하는 역할을 합니다. 이 블로그에서는 JVM의 구조와 동작 메커니즘에 대해 자세히 살펴보겠습니다.


1. JVM이란?

  • 정의:
    • JVM은 Java 프로그램을 실행하는 가상 컴퓨터로, 자바 언어로 작성된 바이트코드를 기계어로 변환하고 실행합니다.
  • 목적:
    • 자바의 주요 강점 중 하나인 "Write Once, Run Anywhere"를 가능하게 합니다.

2. JVM 구조

  • Class Loader:
    • 자바 클래스 파일(.class)을 JVM으로 동적으로 로드하는 역할을 합니다.
    • 로딩, 링크, 초기화의 단계로 구성됩니다.
  • Runtime Data Areas:
    • JVM은 다양한 데이터 영역을 가지고 있습니다.
      • Method Area: 클래스 수준의 정보 (클래스 이름, 메서드, 필드)를 저장합니다.
      • Heap: 객체 인스턴스가 저장되는 메모리 영역입니다.
      • Stack: 각 스레드마다 메서드 호출과 지역 변수를 저장하는 공간입니다.
      • PC Register: 현재 수행 중인 스레드의 주소를 저장합니다.
      • Native Method Stack: 자바 외의 언어로 작성된 네이티브 코드를 위한 스택입니다.
  • Execution Engine:
    • 바이트코드를 실제로 기계어로 해석하고 실행합니다.
    • JIT(Just-In-Time) 컴파일러를 사용하여 성능을 향상시킵니다.
  • Native Method Interface:
    • 자바 외의 언어로 작성된 코드를 호출하거나 자바에서 호출할 수 있도록 하는 인터페이스입니다.

3. JVM 동작 메커니즘

  • 로딩 (Loading):
    • 클래스 로더가 클래스 파일을 읽어 메모리에 로드합니다.
  • 링크 (Linking):
    • 로드된 클래스에 대해 참조하는 외부 클래스 및 메서드와의 연결을 수행합니다.
    • Verify, Prepare, Resolve의 단계로 나뉩니다.
  • 초기화 (Initialization):
    • 클래스 변수들을 기본값 또는 사용자가 지정한 값으로 초기화합니다.
  • 실행 (Execution):
    • 프로그램의 main() 메서드를 찾아 실행하며, 필요한 클래스와 메서드를 호출합니다.

4. 가비지 컬렉션 (Garbage Collection)

  • 목적:
    • 더 이상 사용되지 않는 객체들을 자동으로 찾아 메모리를 회수합니다.
  • 알고리즘:
    • 다양한 가비지 컬렉션 알고리즘이 있으며, 주요 알고리즘으로는 Mark and Sweep, Generational, G1(Garbage First) 등이 있습니다.

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

  • 목적:
    • 바이트코드를 기계어로 변환하여 런타임 성능을 향상시킵니다.
  • 동작:
    • 프로그램이 실행될 때, 필요한 부분의 바이트코드를 직접 기계어로 변환하고 캐시에 저장하여 재사용합니다.

6. JVM 튜닝과 성능 최적화

  • 힙 크기 조정:
    • -Xms-Xmx 옵션을 사용하여 초기 힙 크기와 최대

 

728x90

'Java' 카테고리의 다른 글

[Java] 접근 제어자(Access Modifiers)  (1) 2023.12.22
[Java] 애노테이션(Annotation)  (0) 2023.12.15
[Java] 컬렉션 (Collection)  (1) 2023.12.12
[Java] 리터럴 풀 (literal pool)  (0) 2023.12.12
[Java] 람다 표현식(Lambda)  (1) 2023.12.07