공부/Java

Java Virtual Machine(JVM)

ironk.im 2021. 5. 8. 22:22
반응형

Java는 소스 코드를 컴파일 하고 컴파일의 결과로 만들어진 바이트코드를 인터프리터에 의해 해석하여 실행되는 언어이다.

JVM 구조

https://www.nowwatersblog.com/cs/JVM

 

JVM의 실행 순서

  1. JVM이 OS로부터 필요로 하는 메모리를 할당 받는다. JVM은 할당받은 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
  2. Class Loader를 통해 자바 바이트 코드가 JVM Runtime Data Areas로 로딩 된다.
  3. 로딩된 바이트 코드가 Execution Engine에 의해 해석 된다.
  4. 해석된 바이트 코드는 JVM Runtime Data Areas에 배치되어 실행 된다.
  5. 실행 과정에서 Garbage Collection이 메모리 관리 작업을 수행한다.

 

Runtime Data Area

Heap

  • 객체 인스턴스와 배열이 저장되는 영역
  • Java에서 생성된 모든 객체는 이 힙 영역에 할당
  • 힙은 모든 스레드가 공유하며, 가비지 컬렉터에 의해 관리

Stack

  • 각 스레드마다 독립적으로 존재하는 메모리 영역
  • 메서드 호출 시 생성되는 프레임(스택 프레임) 저장
  • 각 프레임에는 메서드의 로컬 변수, 매개변수, 반환 주소 등 포함
  • 메서드가 호출될 때 프레임이 스택에 추가되고, 메서드 실행이 완료되면 프레임 제거

Method

  • 클래스에 대한 정보를 저장하는 영역
  • 클래스의 구조(클래스 이름, 메서드, 필드, 상수 풀 등)와 정적 변수(static 변수) 정보 포함
  • 모든 스레드가 공유

PC Register

  • 각 스레드마다 존재하는 작은 메모리 공간
  • 현재 실행 중인 JVM 명령 주소 저장
  • 스레드가 실행 될 때, 해당 스레드의 PC 레지스터 업데이트

Native Method

  • Java가 아닌 언어로 작성된 네이티브 메서드 호출 시 사용하는 스택
  • 네이티브 메서드의 로컬 변수와 매개변수 저장
반응형