Programming Language/- Java

자바 JVM(Java Virtual Machine) 메모리 구조

자굿 2022. 6. 1. 20:12

JVM(Java Virtual Machine) 이란?

 

JVM은 컴파일된 자바의 바이트코드(. class)들을 OS에서 실행하기 위한 표준 스펙이며 다양한 구현체가 존재한다.

 

Java 언어 자체는 JVM에서 동작하기 때문에 OS 독립적이지만

 

JVM은 각 OS에 종속적(윈도우용 JVM, 리눅스용 JVM 등)이다.

 

자바 프로그램 레이어 (출처 : http://www.tcpschool.com/java/java_intro_programming)

 

JVM은 크게 아래와 같이 분류할 수 있다.

  • Class Loader
  • JVM Memory(Run-time Data Areas)
  • Execution Engine

JVM 구조 (출처 : https://en.wikipedia.org/wiki/Java_virtual_machine)


오늘은 JVM의 메모리에 대해서 알아본다.

 

JVM Memory (Run-time Data Areas)

 

JVM의 메모리는 위 그림에서와 같이 

  • Method Area
  • Heap
  • JVM Language Stacks
  • PC Registers
  • Native Method Stacks

 

로 구성되어 있다.

 

JVM 메모리는 크게

  • JVM의 실행과 동시에 생성되고 종료되면 삭제되는 메모리 영역
    • Method Area
    • Heap
  • 스레드의 생성과 삭제에 따라 생성되고 삭제되는 메모리 영역
    • PC Register
    • JVM Language Stacks
    • Native Method Stacks

 

2가지가 있다.

 

JVM 메모리 (출처 : https://dzone.com/articles/jvm-run-time-data-areas)

 

 

각 메모리 영역에 대해 알아보자.

 

Method Area (Class Area, Static Area)

데이터 할당

  • Class 요소들
    • 필드 
    • 메서드 데이터
    • 메서드와 생성자를 위한 코드
    • static 변수
    • final 변수
    • Runtime Constant Pool(상수) 

특징

  • 모든 스레드에서 정보 공유

Heap

데이터 할당

  • 실행 중 생성된 객체들
    • new 로 생성된 객체
    • Array와 같이 동적으로 생성된 데이터
    • Reference Type의 데이터 등

특징

  • Garbage Collector 가 제거하지 않는 한 데이터 유지
  • 모든 스레드에서 정보 공유

JVM Language Stacks (Java Stack)

데이터 할당

  • 지역변수
    • Primary Type : 을 저장
    • Reference Type : Heap에 저장된 데이터의 주소값을 Stack에 저장해서 사용
  • 메서드 호출 및 반환(stack frame)
    • 호출되는 메서드의 매개변수, 지역변수

특징

  • 스레드마다 개별 JVM Language Stack을 가지고 있음
  • 스레드와 동시에 생성됨

PC(Program Counter) Register

특징

  • 어느 시점에서도 스레드는 단일 메서드를 실행
  • 스레드가 생성되면서 생기는 메모리 영역
  • 스레드가 어느 명령어를 처리하고 있는지 그 주소를 등록
  • JVM이 실행하고 있는 현재 위치를 저장하는 역할
  • 스레드마다 개별 PC Register를 가지고 있음

Native Method Stacks

특징

  • Java가 아닌 다른 언어(C, C++)로 구성된 메서드를 실행할 때 사용되는 영역
  • 스레드마다 개별 Native Method Stack을 가지고 있음

 

 

참조

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.5

http://www.tcpschool.com/java/java_intro_programming

https://honbabzone.com/java/java-jvm/

반응형