본문 바로가기
Programming Language/Java

[Java/개념] 자바 가상 머신(Java Virtual Machine)

by wo__ongii 2024. 10. 4.
728x90
반응형

자바 가상 머신(JVM)은 자바 프로그램을 실행하는 가상의 운영체제입니다. 자바 프로그램은 중간 단계의 바이트코드를 사용하므로, 이를 실행할 수 있는 JVM이 필요합니다. JVM은 자바 프로그램이 다양한 운영체제에서 동일하게 실행될 수 있게 해주는 중요한 역할을 합니다.

1. JVM의 개념

  • 자바 프로그램은 운영체제에서 직접 실행되지 않습니다. 자바 소스 코드는 기계어가 아닌 바이트코드로 컴파일되며, 이를 해석하고 실행하는 가상의 환경이 JVM입니다.
  • JVM은 자바 기반 애플리케이션을 위해 이식 가능한 실행 환경을 제공하며, 메모리 관리와 같은 시스템 자원을 효율적으로 관리합니다.
  • 운영체제마다 프로그램 실행 방식이 다르지만, JVM은 자바 프로그램이 다양한 운영체제와 기기에서 동일하게 동작하도록 설계되었습니다.

2. JVM의 주요 기능

  • 플랫폼 독립성: JVM은 자바 프로그램이 특정 운영체제나 하드웨어에 종속되지 않도록 하며, 여러 플랫폼에서 동일한 코드를 실행할 수 있게 합니다.
  • 메모리 관리: JVM은 자동으로 메모리를 관리하며, 가비지 컬렉션(Garbage Collection)을 통해 불필요한 객체를 정리해 메모리 누수 문제를 줄여줍니다.
  • 다중 스레드 지원: JVM은 다중 스레드 프로그래밍을 지원하고, 스레드 간 동기화와 관련된 복잡한 작업을 간소화합니다.
  • 예외 처리: 프로그램 실행 중 발생할 수 있는 예외를 처리하여, 비정상적인 종료를 방지합니다.

3. JVM의 구성 요소

1) 클래스 로더(Class Loader)

  • 자바는 동적으로 클래스를 로딩하므로, 프로그램 실행 중에 필요한 클래스를 JVM에 연결합니다.
  • 클래스 로더는 클래스 파일(.class)을 로드하고 링크하여 JVM 메모리에 배치하는 역할을 합니다. 클래스가 인스턴스화되면, 이를 메모리에 로드합니다.

2) 실행 엔진(Execution Engine)

  • 실행 엔진은 클래스 로더가 로드한 바이트코드를 실제로 실행하는 모듈입니다.
  • 자바 인터프리터(Interpreter): 바이트코드를 한 줄씩 해석해 실행하는 방식으로, 속도가 느리지만 구현이 간단합니다.
  • JIT 컴파일러(Just-In-Time Compiler): 인터프리터의 속도 문제를 해결하기 위해 도입된 방식으로, 바이트코드를 기계어로 변환해 빠르게 실행합니다. 자주 실행되는 코드는 JIT 컴파일러가 최적화하여 성능을 향상시킵니다.

3) 가비지 컬렉터(Garbage Collector)

  • 가비지 컬렉터는 더 이상 사용되지 않는 객체를 자동으로 메모리에서 해제해주는 역할을 합니다. 개발자는 직접 메모리를 관리할 필요 없이 JVM이 이를 처리합니다.

4) 런타임 데이터 영역(Runtime Data Area)

JVM이 프로그램을 실행할 때 사용하는 메모리 영역으로, 여러 가지 세부 영역으로 나뉩니다.

  • Method Area: 클래스, 메서드, 필드 등의 메타 정보를 저장하는 영역으로, 모든 스레드가 공유합니다.
    • Runtime Constant Pool: Method Area 내에서 상수 풀을 관리하는 영역입니다. 중복된 상수를 방지하고 효율적으로 관리합니다.
  • Heap: 인스턴스가 동적으로 생성되어 저장되는 공간으로, 크게 New/Young 영역, Old 영역, Metaspace로 나뉩니다.
  • PC Register: 각 스레드별로 현재 실행 중인 JVM 명령어의 주소를 기록하는 레지스터입니다.
  • JVM Stack: 메서드 호출과 관련된 정보(매개변수, 지역 변수, 반환 주소 등)를 저장하는 영역입니다. 메서드 실행이 종료되면 스택에서 제거됩니다.
  • Native Method Stack: 자바 외의 네이티브 코드(C/C++ 등)를 위한 스택입니다. Java Native Interface(JNI)를 통해 호출되는 네이티브 코드를 처리합니다.

 

 

 

 

[출처 : https://www.tcpschool.com/java/java_intro_programming / https://steemit.com/kr/@parkjp/java-jvm]

728x90
반응형