경계의 경계

자바의 JVM 본문

Java

자바의 JVM

gigyesik 2024. 3. 1. 17:43

JVM 이란 무엇인가

Java Virtual Machine 의 약자로, 자바로 작성된 프로그램을 실행시켜 주는 가상의 장치이다.

JVM 은 플랫폼 독립적이므로, 실행 환경에 구애받지 않는다.

JVM 은 자바 코드를 소스 내 main() 메서드를 실행함으로써 동작한다.

JVM 은 JRE (Java Runtime Environment) 의 일부이다.

JVM 의 역할

JVM 은 아래 역할을 수행한다

  • 코드 로딩
  • 코드 검증
  • 코드 실행
  • 런타임 환경 제공

JVM 은 아래 영역에서 정의된다

  • 메모리 영역
  • 클래스 로딩
  • 레지스터
  • Garbage Collect 힙
  • 치명적 에러 리포트

JVM 의 구조 (Architecture)

JVM 은 아래 계층의 구성요소들이 상호작용하는 구조를 가지고 있다.

  • Classloader
  • Memory Area (Class Area, Heap, Stack, PC Register, Native Method Stack)
  • Execution Engine
  • Native Method Interface
  • Java Native Libraries

Classloader

Classloader 는 클래스 파일을 읽어들이는 JVM 하위 시스템이다. 자바로 작성된 프로그램을 실행할 때마다 기동되며, 3가지 종류가 있다.

  • Bootstrap : rt.jar 파일을 읽어 자바 내장 패키지 (java.lang, java.net, java.util, java.io 등) 들을 로딩한다.
  • Extension : Bootrstrap 의 하위 로더로, $JAVA_HOME/jre/lib/ext 경로에 포함되어 있는 jar 파일들을 로딩한다.
  • System/Application : Extension 의 하위 로더. 프로젝트의 클래스 파일들을 로딩한다.
public class ClassLoaderTest {
    public static void main(String[] args) {
        // Application Classloader
        Class c = ClassLoaderTest.class;
        System.out.println(c.getClassLoader()); // jdk.internal.loader.ClassLoaders$AppClassLoader

        // Bootstrap Classloader (built-in class)
        System.out.println(String.class.getClassLoader()); // null
    }
}

Class (Method) Area

Class Area 는 런타임 상수, 필드, 메서드, 인스턴스 변수들을 저장하는 공간

Heap

런타임에 생성된 객체들이 위치하는 공간

Stack

로컬 변수와 메서드의 중간 실행 결과들이 저장되는 공간

Program Counter Register

실행된 JVM 의 주소가 저장되는 공간

Native Method Stack

어플리케이션 내 사용되는 모든 native method 가 저장되는 공간

Execution Engine

  • 가상 실행장치
  • 바이트 코드 인터프리터
  • 컴파일러

Java Native Interface

다른 언어 환경과 함께 동작하기 위한 (OS 등 다른 프로그램) 프레임워크

Resources

'Java' 카테고리의 다른 글

자바의 쓰레드 관리  (0) 2024.03.02
자바의 Garbage Collection  (0) 2024.03.02
자바의 Stream  (1) 2024.02.29
자바의 제네릭 (Generic)  (1) 2024.02.28
자바의 네트워킹과 소켓 통신  (1) 2024.02.27