[Java] JVM : Java Virtual Machine

728x90

JVM이란 무엇인가?

JVM(Java Virtual Machine)은 자바 프로그램을 실행하기 위한 가상 머신이다. 자바는 플랫폼 독립적인 언어인데, 이는 자바 코드가 특정 운영체제나 하드웨어에 종속되지 않기 때문이다. 자바 코드가 한 번 컴파일되면 .class 파일이 생성되고, 이 파일을 다양한 환경에서 실행할 수 있도록 해주는 것이 바로 JVM이다.

 

JVM의 구조

클래스 로더(Class Loader)

클래스 로더는 자바 클래스 파일을 메모리에 적재하고, 런타임에 필요한 클래스들을 동적으로 로딩한다. 이 과정은 크게 세 단계로 나누어 진다.

  • 로딩(Loading): 바이트코드를 메모리에 적재
  • 링크(Linking): 레퍼런스 해결 및 검증
  • 초기화(Initialization): 정적 초기화 블록 실행

메모리 영역 (Runtime Data Area)

JVM은 프로그램을 실행하기 위해 메모리를 여러 영역으로 나누어 관리한다.

  • 메소드 영역(Method Area): 클래스 구조, 메소드 데이터, 상수 풀 등을 저장하는 공간.
  • 힙(Heap): 객체를 저장하는 메모리 영역. 가비지 컬렉션의 대상이 되는 영역이다.
  • 스택(Stack): 각 스레드가 사용하는 메소드 호출과 관련된 로컬 변수 및 메소드 호출 기록을 저장하는 영역이다.
  • PC 레지스터(PC Register): 스레드가 실행 중인 JVM 명령어 주소를 저장한다.
  • 네이티브 메소드 스택(Native Method Stack): 자바 외부의 네이티브 코드(C, C++ 등)를 호출할 때 사용하는 스택이다.

💡 Runtime Data Area (JVM 메모리) 영역에 따른 3가지 Java 의 변수 분류

정적(클래스) 변수 (Static Variable) : 클래스 내 필드/메서드와 정적 필드/메서드 ⇒ Method/Static 영역
인스턴스(객체) 변수 (Instance Variable) : new 키워드로 인스턴스 생성 시 생성자로 적재 ⇒ Heap 영역
지역 변수 (Local Variable) : 메서드 호출 시 필요한 파라미터나 내부 변수이기에 ⇒ Stack 영역

실행 엔진(Execution Engine)

실행 엔진은 바이트코드를 실제로 실행하는 역할을 한다. 주요 구성 요소는 다음과 같다.

  • 인터프리터(Interpreter): 바이트코드를 한 줄씩 해석하여 실행한다. 하지만 인터프리터 방식은 느리기 때문에 자주 실행되는 코드는 JIT 컴파일러가 최적화한다.
  • JIT(Just-In-Time) 컴파일러: 바이트코드를 런타임에 기계어로 변환하여 성능을 높인다.
  • 가비지 컬렉터(Garbage Collector): 사용하지 않는 객체를 자동으로 메모리에서 해제한다.

 

JVM의 작동 원리

 

  • 자바 컴파일러(javac)는 자바 소스 코드를 바이트코드로 컴파일하여 .class 파일을 생성한다.
  • JVM의 클래스 로더는 .class 파일을 읽어 메모리에 적재한다.
  • 실행 엔진이 바이트코드를 실행하여 프로그램을 구동시킨다.
    • 인터프리터 방식으로 코드를 해석하거나, JIT 컴파일러가 자주 사용되는 코드를 기계어로 변환하여 성능을 높인다.
  • 프로그램 실행 중 생성된 객체는 힙에 저장되고, 더 이상 필요하지 않은 객체는 가비지 컬렉터에 의해 자동으로 제거된다.
💡 가비지 컬렉션(Garbage Collection)
가비지 컬렉션은 JVM의 중요한 기능 중 하나다. 메모리 관리를 자동으로 처리하기 때문에 개발자가 명시적으로 메모리 해제를 신경 쓰지 않아도 된다. JVM은 다양한 가비지 컬렉션 알고리즘을 사용하며, 각 알고리즘은 성능과 메모리 사용 간의 트레이드오프를 가진다.
Serial GC: 단일 스레드를 사용하여 가비지 컬렉션을 수행한다. 단순하지만 성능이 낮다.
Parallel GC: 여러 스레드를 사용하여 가비지 컬렉션을 병렬로 수행하여 성능을 높인다.
G1(Garbage First) GC: 힙을 여러 영역으로 나누어 관리하고, 우선순위가 높은 영역부터 가비지 컬렉션을 수행하여 짧은 GC 일시 중지를 제공한다.

 

참고문헌

 

[JAVA] JVM이란? 개념 및 구조 (JDK, JRE, JIT, 가비지 콜렉터...)

JVM이란 무엇인가 Java Virtual Machine의 줄임말. 직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다. Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되

doozi0316.tistory.com

 

728x90