본문 바로가기
자바

JVM (Java Virtual Machine)

by Hyeongjun_Ham 2024. 1. 18.

JVM (Java Virtual Machine)

JVM이란?

Java Virtual Machine의 줄임말이다.

자바를 실행하기 위한 가상 기계(컴퓨터)라고 할 수 있다.

JVM은 자바 바이트코드를 해석하고 실행하는 역할을 수행한다.

 

특징

  • 플랫폼 독립성
    • JVM은 플랫폼 독립적인 특성을 가지고 있다.
    • 자바 프로그램은 소스 코드를 자바 컴파일러를 통해 바이트 코드로 변환하고, JVM은 이 바이트코드를 특정 플랫폼에서 실행할 수 있게 해 준다.
    • 동일한 자바 프로그램을 여러 운영체제나 아키텍처에서 실행할 수 있다.
  • 자동 메모리 관리
    • JVM은 가비지 컬렉션(Garbage Collection)을 통해 자동으로 메모리를 관리한다.
  • 바이트코드 실행
    • 자바 소스 코드는 자바 컴파일러에 의해 자바 바이트 코드로 변환된다.
    • JVM은 이 바이트코드를 인터프리터나 JIT(Just-In-Time) 컴파일러를 사용하여 실행하며, 이로써 실행속도를 최적화한다.
  • 스레드 관리
    • JVM은 멀티스레딩을 지원하고, 스레드 스케줄링과 동기화를 관리하여 여러 스레드에서 동시에 실행되는 자바 프로그램을 지원한다.
  • 자바 API 지원
    • JVM은 자바 표준 라이브러리 및 다양한 API를 제공하여 다양한 기능을 사용할 수 있게 한다.

JVM 구성요소

 

JVM은 크게 3가지 주요 부분으로 나뉜다.

 

  • 1. 클래스 로더(Class Loader)
    • 클래스 로더는 자바 클래스 파일들을 JVM으로 동적으로 로드하고 링크하는 역할을 담당한다.

  • 2. 런타임 데이터 영역(Runtime Data Area)
    • 런타임 데이터 영역은 JVM이 프로그램을 실행하는 동안 사용하는 데이터들을 저장하는 영역이다.
      • 구성요소
        • 메서드 영역(Method Area) : 클래스 정보, 정적 변수, 메서드 코드 등이 저장되는 영역
        • 힙(Heap) : 동적으로 생성된 객체 인스턴스들이 저장되는 영역
        • 스택(Stack) : 메서드 호출과 관련된 정보, 지역 변수, 중간 연산 결과 등이 저장되는 영역
        • PC Register : 스레드가 실행 중인 부분의 주소를 저장
        • Native Method Stack : 네이티브 코드(다른 언어로 작성된 코드)를 실행하기 위한 스택 영역
  • 3. 실행 엔진(Execution Engine)
    • 실행 엔진은 JVM에서 자바 바이트코드를 기계어로 해석하거나, JIT컴파일러를 통해 기계어로 변환하여 실행한다.
    • 종류
      • 인터프리터(Interpreter) : 바이트코드를 한 줄씩 해석하고 실행한다. 빠른 실행이 필요한 경우에는 적절하지 않을 수 있다.
      • JIT 컴파일러 : 인터프리터의 성능 문제를 극복하기 위해, 바이트코드를 네이티브 코드로 변환하여 실행한다. 변환된 코드는 캐시에 저장되어 재사용된다.
      • 가비지 컬렉터 : 더 이상 참조되지 않는 개체를 수거하는 역할을 한다.

 

 

Reference

https://doozi0316.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80

 

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

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

doozi0316.tistory.com

https://poetic-code.tistory.com/118

 

[Java] 런타임 데이터 영역(Runtime Data Area)

JVM이 OS위에서 실행되면서 할당받는 메모리 영역이 바로 런타임 데이터 영역(Runtime Data Arae) 입니다. 이 영역은 크게 5가지 조금 세분화하면 6가지 영역으로 나눌 수 있습니다. 스레드 관점 스레드

poetic-code.tistory.com