프로그래밍언어/Java

JVM (Java Virtual Machine) : 자바 바이트 코드를 실행한다

Dev-SeeOne 2020. 8. 9. 20:36

JVM 구조

Class Loader

  • .class 에서 바이트코드를 읽고 메모리에 저장
  • Loading : 클래스를 읽어옴
  • Linking : 레퍼런스 연결
  • Initialization : static 값 초기화 및 변수에 할당

Memory

공유자원

  • 메소드 영역 : 클래스 수준의 정보(클래스 이름, 부모 클래스 이름, 메소드, 변수) 저장
  • 힙 영역 : 객체를 저장

특정 스레드마다 가지고 있는 자원

  • 스택 영역 : 스레드마다 런타임 스택을 생성, 메서드 호출을 스택 프레임이라고 부르는 블럭으로 쌓는다. 스레드 종료시 런타밈 스택 사라짐
  • PC(Program Counter) 레지스터 : 스레드 내 현재 실행할 스택 프레임을 가리키는 포인터 생성
  • 네이티브 메소드 스택
    • 네이티브 메소드 : 메소드에 네이티브 키워드 + 구현을 Java 가 아닌 C, C++로 한 것, ex) Thread.currentThread()

Execution Engine

  • Interpreter : 바이트 코드를 한 줄씩 실행
  • JIT Compiler : 인터프리터의 효율을 높이기 위해, 반복되는 코드를 발견하면 JIT 컴파일러가 반복되는 코드를 모두 네이티브 코드로 변환, 인터프리터는 네이티브 코드로 컴파일된 코드를 바로 사용
  • GC(Garbage Collector) : 더 이상 참조되지 않는 객체를 모아서 정리한다.