ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JVM(Java Virtual Machine)
    CS/JAVA 2024. 9. 2. 02:03

    JAVA는 컴파일 언어와 인터프리터 언어의 특징을 모두 가진 하이브리드 언어다.

    C언어는 각 운영 체제는 고유한 시스템 호출 API가 있어서, OS 간 호환성을 고려하지 않은 코드는 특정 OS에서만 실행될 수 있다.

    하지만 JAVA로 짜여진 코드는 여러 OS에서 실행이 가능하다. 이걸 가능하게 해주는 것이 JVM이다.

    자바의 소스 코드는 먼저 JAVA Compiler를 이용해 바이트코드로 컴파일되고, 그 후 자바 가상 머신(JVM)이 이 바이트코드를 실행된다.

    인터프리터 언어
    컴파일 언어

     

    java - 하이브리드

     

    JVM(Java Virtual Machine)

    자바 가상머신, 즉 JVM은 JAVA와 운영체제 사이의 중계자 역할을 해준다.

     

     

    JAVA가 OS환경에 상관없이 실해될 수 있게 되는 과정은 다음과 같다.

    1. 프로그램이 실행되면 JVM은 OS로부터 메모리 공간을 할당 받는다.

    2. 사용자가 작성한 자바 소스 파일은 자바 컴파일러에 의해 클래스파일(바이트 코드)로 변환된다.

    3. 변환된 클래스 파일은 클래스 로더를 통해 JVM의 메모리에 저장된다.

    4. 클래스 파일들은 Excution Engine에 의해 해석된다.

     

     

     

    1. Class Loader

    • Class Loader는 자바 바이트코드(.class 파일)를 JVM으로 로드하는 역할을 한다. 로드된 클래스는 Method Area에 저장된다 자바 프로그램의 클래스 파일을 메모리에 적재하고, 이를 실행할 수 있도록 준비한다. 
    • 구성 요소:
      • Bootstrap Class Loader: 가장 기본적인 클래스 로더로, JDK 내부의 핵심 클래스들을 로드.
      • Extension Class Loader: ext 디렉토리에 있는 확장 클래스들을 로드.
      • Application Class Loader: 애플리케이션 클래스 패스를 통해 지정된 사용자 클래스를 로드.

    2. Execution Engine

    • Execution Engine은 로드된 바이트코드를 실행하는 JVM의 핵심 부분이다. 바이트코드를 해석하여 실제로 컴퓨터에서 실행할 수 있는 명령으로 변환한다.
    • 구성 요소:
      • Interpreter: 바이트코드를 한 줄씩 읽고 실행합니다. 속도는 느리지만, 메모리 사용이 적다.
      • JIT Compiler (Just-In-Time Compiler): 반복적으로 사용되는 바이트코드를 기계어로 변환하여 실행 속도를 높인다.
      • Garbage Collector: 사용하지 않는 메모리를 자동으로 정리하여 메모리 관리를 돕는다.

    3. Runtime Data Area

    • 프로그램 실행 시 JVM이 사용하는 메모리 영역이다. 여기에는 클래스 로더에 의해 로드된 클래스 데이터, 객체, 메서드 실행 정보 등이 저장된다.
    • 구성 요소:
      • Method Area: 클래스 수준의 구조(메서드, 변수, 상수 등)가 저장되는 공간이다.
      • Heap: 자바 객체와 배열이 저장되는 공간이다. 모든 스레드가 공유한다.
      • Stack: 각 스레드가 사용하는 스택 메모리로, 메서드 호출 시 생성되는 프레임이 저장된다.
      • PC Register: 각 스레드의 현재 실행 중인 명령어 주소를 저장한다.
      • Native Method Stack: 자바 외의 네이티브 코드(C/C++ 등)의 호출을 지원하기 위한 스택이다
Designed by Tistory.