Contents
The Java Manipulation(2)
   Jun 30, 2022     2 min read

JVM 구조

Untitled

Untitled 1

클래스 로더 시스템

  • .class에서 바이트코드를 읽고 메모리에 저장

  • 로딩 : 클래스 읽어오는 과정

  • 링크 : 레퍼런스를 연결하는과정

  • 초기화 : static 값들 초기화 및 변수에 할당

메모리

  • 메소드(Method) 영역은 클래스 수준의 정보(클래스이름, 부모 클래스 이름, 메소드, 변수 정보 등과 같은 모든 클래스 수준 정보가 저장된다. JVM당 하나의 메소드 영역만 있으며 공유 자원이다.

  • 힙(Heap) 영역은 모든 객체의 정보가 저장된다. JVM당 하나의 힙 영역도 있다. 또한 공유 자원이다.

  • 스택(Stack) 영역은 모든 스레드에 대해 JVM은 여기에 저장되는 하나의 런타임 스택을 생성합니다. 이 스택의 모든 블록은 메서드 호출을 저장하는 활성화 레코드/ 스택 프레임이라고 한다. 해당 메서드의 모든 지역 변수는 해당 프레임에 저정된다. 스레드가 종료된 후 런타임 스택은 JVM에 의해 사라진다. 공유 자원이 아니다.

  • PC(Program Counter) 레지스터 : 스레드의 현재 실행 명령 주소를 저장한다. 각 스레드에는 별도의 PC레지스터가 있다.

  • 네이티브 메서드 스택(Native Method Stack) : 모든 스레드에 대해 별도의 네이티브 스택이 생성된다. 기본 메서드 정보를 저장한다. https://javapapers.com/core-java/java-jvm-run-time-data-areas/#Program_Counter_PC_Register

실행 엔진

  • 인터프리터 : 바이트 코드를 한줄 씩 실행한다.

  • JIT 컴파일러 : 인터프리터 효율을 높이기 위해, 인터프리터가 반복되는 코드를 발견하면 JIT 컴파일러로 반복되는 코드를 모두 네이티브 코드로 바꿔둔다. 그 다음부터 인터프리터는 네이티브 코드로 컴파일된 코드를 바로 사용한다.

  • GC(Garbage Collector) : 더 이상 참조되지 않는 객체를 모아서 정리한다.

JIN(Java Native Interface)

참고