JVM 구조 및 동작방식

김도비·2023년 1월 29일
0

Etc

목록 보기
3/4

Java를 쓰면서 JVM에 대해 너무 잘 알지 못하고 쓰는 것 같아 정리하면서 머리에 넣어 보고자 한다.

개요

JVM 은 자바 가상머신이며, 자바 바이트코드를 실행 할 수 있는 주체로 JVM 덕분에 CPU나 OS와 별개로 독릭적으로 동작 가능하다.

JVM 구조

JVM의 경우 크게 Garbage Collector, Execution Engine, Class Loader, Runtime Data Area 4가지로 나뉜다.

1. Class Loader

JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다. 런타임 시에 동적으로 클래스를 로드한다.

2. Execution Engine

클래스 로더를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드들을 명령어 단위로 읽어서 실행한다. JIT 컴파일러 방식을 사용하는데,
JIT는 바이트 코드를 어셈블러 같은 네이티브 코드로 바꿈으로써 실행이 빠르지만 역시 변환하는데 비용이 발생한다. 이 같은 이유로 JVM은 모든 코드를 JIT 컴파일러 방식으로 실행하지 않고, 인터프리터 방식을 사용하다가 일정한 기준이 넘어가면 JIT 컴파일러 방식으로 실행한다.

3. Garbage Collector

Garbage Collector(GC)는 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할을 한다. 이때, GC가 역할을 하는 시간은 언제인지 정확히 알 수 없다.(상세하게 따로 정리 예정)

4. Runtime Data Area

JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역. 이 영역은 크게 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack로 나눌 수 있다.

4.1. Method area

  • 공유 자원 영역
  • 클래스, 메소드 정보 , 필드, Static 변수 저장

4.2. Heap area

  • 공유 자원 영역
  • new 키워드로 생성된 객체와 배열이 생성되는 영역
  • GC를 통해 참조되지 않은 객체 제거 영역

4.3. Stack area

  • 메서드 호출 시 마다 각각 스택 프레임 생성
  • 해당 메서드안 사용되는 값 저장 및 지역 변수, 파라미터, 지역변수로써 선언된 객체에 대한 참조값 등이 저장되는 영역

4.4. PC Register

  • 쓰레드가 시작될 때 생성되며, 생성될 때마다 생성되는 공간으로 쓰레드마다 하나씩 존재
  • 쓰레드가 어떤 부분을 무슨 명령으로 실행해야할 지에 대한 기록을 하는 부분으로 현재 수행중인 JVM 명령의 주소를 갖는다.

4.5. Native method stack

  • 자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역.
profile
모든 걸 기록하자

0개의 댓글