JVM

  • 자바 가상 머신
  • 자바 바이트 코드를 OS에 맞는 바이너리 코드로 컴파일하여 실행
    • 자바는 플랫폼 독립적이지만 바이트 코드를 컴파일하는 JVM은 플랫폼 종속적이다.

 

JVM 의 구조

ClassLoader

  • .class 파일의 바이트 코드를 읽고 메모리에 저장한다.
  • 로딩, 링크, 초기화 순으로 진행하여 메모리의 각 영역에 데이터를 저장

 

Memory

Method 영역

  • 클래스 수준의 정보를 저장
    • 클래스 이름, 부모 클래스 이름, 메소드, 변수
    • 공유 자원으로서 쓰레드에 상관없이 사용 가능한 자원

Heap 영역

  • 객체를 저장하며 Method 영역의 자원과 마찬가지로 공유 자원이다.

Stack 영역

  • 쓰레드마다 런타임 스택을 생성하고 그 안에 메서드 호출마다 스택 프레임을 쌓는다. 쓰레드가 종료되면 런타임 스택도 제거된다.

PC Register

  • 쓰레드마다 쓰레드 내 현재 실행할 위치를 가리키는 포인터가 생성된다.

 

Execution Engine

Interpreter

  • 바이트 코드를 한 줄씩 바이너리 코드로 해석하여 실행

JIT Compiler 

  • 인터프리터의 효율을 높이기 위해 작동하는 컴파일러
  • 인터프리터가 반복되는 코드를 발견하면 해당 코드들을 모두 네이티브 코드로 컴파일한다.
    • 네이티브 코드로 컴파일된 코드는 인터프리터가 더 이상 해석하지 않고 바로 실행하여 속도가 향상된다.

Gavage Collector

  • 더 이상 참조되지 않는 객체를 모아서 메모리를 해제한다.

'Java' 카테고리의 다른 글

애너테이션  (0) 2022.09.06
Thread의 동기화 처리  (0) 2022.09.04
Demon Thread  (0) 2022.09.04
Thread 의 동시성과 병렬성  (0) 2022.09.01
자바 소스 코드의 실행 과정  (0) 2022.08.30

+ Recent posts