Study/java

[Java] JVM(Java Virtual Machine 자바 가상 머신)이란?

 

JVM이란 무엇인지, JVM의 특징과 구조, 동작 원리에 대해 정리하였습니다.

 

JVM이란?

JVM(Java Virtual Machine)은 컴퓨터가 자바 프로그램을 실행할 수 있게 해주는 가상 머신입니다.

Java 프로그램이 실행되면 JVM은 Java의 바이트 코드(.class 파일)를 읽고 하드웨어에 의해 직접 실행할 수 있는 머신 코드로 변환합니다.

이로 인해, 한번 쓰고 어디서든 실행한다(Write Once, Run Anywhere)라는 자바의 표어에 맞게 다른 환경이라도 자바 코드를 수정하지 않고 원활하게 실행할 수 있습니다.

 

JVM의 특징

플랫폼 독립성

JVM은 하드웨어나 OS의 의존하지 않고 다양한 환경에서 동일한 바이트코드를 실행할 수 있게 합니다.

 

성능

자바는 JVM을 통해 바이트코드를 해석하 과정을 거치기 때문에 다른 언어와 비교했을 때 실행 속도가 느린 편입니다.

하지만 Just-In-Time(JIT) 컴파일 기법에 의해 실행 시 바이트코드를 네이티브 머신 코드로 컴파일함으로써 자바 애플리케이션의 성능을 최적화하고 있습니다.

(Just-In-Time 컴파일 기법 - 프로그램을 실제 실행하는 시점에 기계어로 번역)

 

메모리 관리

JVM은 가비지 컬렉션을 통해 개발자가 메모리를 해제하지 않아도 자동으로 사용하지 않는 메모리를 해제합니다.

 

 

 

 

JVM의 구조

Class Loader

클래스 로더는 디스크에서 JVM의 런타임 데이터 영역으로 클래스 파일을 로드하고 클래스를 확인하고 실행을 준비합니다.

 

런타임 데이터 영역

JVM이 실행 중에 데이터를 저장하는 영역으로, 메소드 영역, 힙, 스택 영역, PC 레지스터 및 네이티브 메소드 스택이 포함됩니다.

 

1. 메소드 영역

JVM에는 모든 JVM 스레드 간에 공유되는 메소드 영역이 있습니다.

메소드 영역은 런타임 상수 풀, 필드 및 메소드 데이터와 같은 클래스별 구조와 클래스 및 인스턴스 초기화 및 인터페이스 초기화에 사용되는 특수 메서드를 저장합니다.

 

2. 힙 영역

힙 영역은 모든 클래스 및 인스턴스, 배열에 대한 메모리가 할당되는 런타임 데이터 영역입니다.

힙은 JVM 시작 시 생성되고, 가비지 컬렉터에 의해 회수됩니다.

 

3. 스택 영역

스택 영역은 로컬 변수와 부분 결과를 보유하고 메소드 호출 및 반환하는 역할을 합니다.

 

4. PC(프로그램 카운터) 레지스터

JVM은 한번에 많은 실행 스레드를 지원할 수 있고 각 JVM 스레드에는 자체 PC 레지스터가 있습니다.

 

Execution Engine

실행 엔진은 클래스의 메서드에 포함된 명령을 실행합니다.

인터프리터, JIT 컴파일러, 가비지 컬렉터가 포함되어 있습니다.

 

JVM의 동작 원리

JVM은 로딩, 연결, 초기화 프로세스로 동작합니다.

Loading

클래스 로더는 .class 파일을 읽어서 메소드 영역에 해당하는 내부 데이터 구조를 생성합니다.

Link

이 단계는 로드된 클래스의 정확성을 검증하고 클래스 변수에 대한 메모리를 할당하고 기호 참조를 해결하여 준비하는 단계입니다.

Initalization

클래스 변수를 기본값으로 초기화하고 Java static initializer와 java 코드 블록을 실행합니다.

 

Reference

https://docs.oracle.com/javase/specs/jvms/se8/html/index.html