Java

[Java] JVM 구조

재담 2022. 2. 15. 22:36

클래스 로더 시스템

  • .class 파일에서 바이트 코드를 읽고 메모리에 저장
  • 로딩 : 클래스를 읽어오는 과정
  • 링크 : 레퍼런스를 연결하는 과정
  • 초기화 : static 값 초기화 및 변수에 할당

 

메모리

  • 메서드 영역에는 클래스 수준의 정보(클래스 이름, 부모 클래스 이름, 메서드, 변수) 저장
  • 힙 영역에는 객체를 저장(공유 자원)
  • 스택 영역에는 스레드마다 런타임 스택을 만들고, 그 안에 메서드 호출을 스택 프레임이라 부르는 블록으로 적재
  • 스레드 종료 시 런타임 스택도 소멸
  • PC(Program Counter) 레지스터, 네이티브 메서드 스택 : 스레드마다 독립적으로 소유

 

실행 엔진

  • 인터프리터 : 바이트 코드를 한 줄씩 실행
  • JIT(Just-In-Time) 컴파일러 : 인터프리터의 효율을 높이기 위해 사용
    1. 인터프리터가 반복되는 코드 발견
    2. JIT 컴파일러로 반복되는 코드를 전부 네이티브 코드로 변경
    3. 인터프리터는 변경된 네이티브 코드를 바로 사용
  • GC(Garbage Collection) : 더 이상 참조되지 않는 객체를 모아서 정리

 

JNI (Java Native Interface)

  • 자바에서 C, C++, 어셈블리로 작성된 함수를 사용할 수 있는 방법 제공
  • native 키워드를 사용
  • 네이티브 메서드 라이브러리 : C, C++로 작성된 라이브러리

Reference