[JAVA] JVM의 구조

혜림·2023년 9월 16일
0
post-thumbnail

JVM이란 무엇인가

자바 가상머신 JVM은 자바 프로그램 실행환경을 만들어주는 소프트웨어이다

JVM의 동작방식


1. 자바로 개발된 프로그램을 실행하면 JVM은 os로 부터 메모리를 할당한다.
2. 자바 컴파일러(javac)가 자바소스코드(.java)를 자바 바이트코드(.class)로 컴파일 한다.
3. Class Loader를 통해 JVM Runtime Data Area로 로딩한다.
4. runtime Data Area에 로딩된 .class뜰은 Execution Engine을 통해 해석한다.
5. 해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치되어 수행하며 이과정에서 Execution Engine에 의해 GC의 작동과 스레드 동기화가 이루어진다.

JVM의 구조

클래스 로더 (Class Loader)

런타임 데이터 영역은 JVM의 메모리 영역으로 자바 애플리 케이션을 실행 할 때 사용되는 데이터들을 적재하는 영역이다.

로드된 바이트코드(.class)들을 엮어서 JVM의 메모리 영역인 Runtime Data Area에 배치된다.

실행 엔진 (execution Engine)

실행 엔진은 클래스 로더를 통해 런타임 데이터 영역에 배치된 바이트 코드를 명령어 단위로 읽어서 실행한다.
자바 바이트코드 (.class)는 기계가 바로 수행할 수 있는 언어보다는 가상머신이 이해할수 있는 중간레벨로 컴파일 된코드이다.

가비지 컬렉터(Garbage Collector)

자바 가상머신은 가비지 컬렉터(Garbage collector)를 이용하여 Heap메모리 영역에서 더는 사용하지 않는 메모리를 자동으로 회수해준다.

런타임 데이터 영역 (Runtime Data Area)

런타임 데이터 영역은 JVM의 메모리 영역으로 자바 애플리 케이션을 실행 할 때 사용되는 데이터들을 적재하는 영역이다.

모든 스레드가 공유해서 사용 (GC의 대상)

  • 힙영역(Heap Area)
  • 메서드 영역(Method Area)

스레드(Thread) 마다 하나씩 생성

  • 스택영역(stack Area)
  • PC 레지스터 (pc Register)
  • 네이티브 메서드 스택(Native Method Stack)

heap Area

모든 스레드가 공유하며, new 키워드로 생성된 객체와 배열이 생성되는 영역입니다. 또한, 메소드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지않는 메모리를 확인하고 제거하는 영역이다.

Method Area

모든 스레드가 공유하는 메모리영역
메소드 영역은 클래스, 인터페이스, 메소드, 필드, 스태틱 변수등의 바이트 코드를 보관한다.

Stack Area

메서드 호출시마다 각각의 스택 프레임(그 메서드만을 위한공간)이 생성합니다. 그리고 메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴값 및 연산 시 일어나는 값들을 임시로 저장한다.
마지막으로, 메서드 수행이 끝나면 프레임별로 삭제한다.

PC Register

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

native method stack

자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역이다.

profile
안녕하세요! :)

0개의 댓글