JAVA - JVM

choko's avatar
Jun 29, 2024
JAVA - JVM
 

JVM

 
notion image
  • JDK(Java Development Kit)
    • 자바 프로그램 실행을 위한 JRE와 자바 개발 시 필요한 라이브러리들이 포함되어 있다.
    • 대표적으로 Oracle JDK(유료), Open JDK(무료)가 있다.
    • Java Development Tools
      • javac : 자바 컴파일러(소스코드 → 바이트코드)
      • java : 자바 인터프리터(바이트코드를 해석하여 실행)
      • javadoc : API document 생성
      • jar : jar 압축 파일을 생성하는 프로그램
      • 등의 여러 프로그램을 포함한다.
      •  
  • JRE(Java Runtime Environment)
    • JVM과 자바 프로그램을 실행시킬때 필요한 라이브러리로 구성되어 있다.
    • 자바 프로그램을 실행시키려면 JRE가 필요하다.
 
  • JVM(Java Virtual Machine)
    • 자바를 돌리는 프로그램이다. 모든 자바 프로그램은 JVM에서만 실행될 수 있다.
    • JVM을 사용하면, 자바 프로그램을 모든 플랫폼에서 제약 없이 동작하도록 할 수 있다.
      • JVM 덕분에, Java는 OS에 종속적이지 않다.
      • JVM은 컴파일된 코드와 OS 중간에서, 컴파일 코드를 해당 OS 환경에 맞게 변환해준다.
          1. 자바 컴파일러가 자바 소스코드를 바이트 코드로 컴파일한다.
          1. JVM이 바이트 코드를 기계어(바이너리)로 변환한다.
          1. 컴파일된 기계어는 바로 CPU에서 실행되어 사용자에게 서비스를 제공한다.
 
 
 
 

JVM 내부 구조

notion image
  • 클래스 로더(Class Loader)
    • 클래스파일을 JVM 내로 로드하고, 링크를 통해 Runtime Data Area에 배치시키는 작업을 한다.
        1. Loading : 클래스 파일을 가져와 JVM 메모리에 로드한다.
        1. Linking : 클래스 파일을 사용하기 위해 검증한다.
        1. Initialization : 클래스 변수들을 적절한 값으로 초기화한다.
  • 실행 엔진(Execution Engine)
    • 런타임 영역에 배치된 바이트 코드를 명령어 단위로 읽어 실행한다.
      • 인터프리터, JIT 컴파일러 두 방식을 혼합하여 바이트 코드를 실행한다.
    • 인터프리터
      • 바이트 코드를 하나씩 읽어 해석하고 실행한다.
    • JIT 컴파일러
      • 바이트 코드를 컴파일하여 네이티브 코드(C/C++, 어셈블리)로 변경 후 네이티브 코드로 직접 실행한다.
    • 가비지 컬랙터
  • 런타임 데이터 영역(Runtime Data Area)
    • JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터를 적재하는 영역이다.
    • 메소드, 힙 영역은 모든 쓰레드가 공유하고, 나머지 PC 레지스터, 스택, 네이티브 메서드는 각 쓰레드마다 개별 생성된다.
    • 메소드 영역
      • 바이트코드를 메모리에 올릴 때 초기화되는 대상을 저장하기 위한 메모리 공간
        • 정적 필드, 클래스 구조
    • 힙 영역
      • 런타임 시 동적으로 할당하여 사용하는 영역
        • new 로 생성된 클래스나 변수, 래퍼런스 타입 등
      • 더 이상 사용되지 않으면 GC 대상이 된다.
    • 스택 영역
      • 기본 자료형을 생성할 때 저장하는 공간
        • 임시적인 변수나 정보 등
    • PC Register
      • 현재 수행중인 JVM 명령어 주소를 저장하는 공간
    • 네이티브 메서드
      • 자바 코드를 컴파일하여 생성한 바이트 코드가 아닌, 기계어로 작성된 프로그램을 실행시키는 영역
      • 자바 이외의 네이티브 코드(C/C++, 어셈블리)를 실행시키는 공간
       
       
       
       
       
       
       
Share article

Tom의 TIL 정리방