ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 JVM(Java Virtual Machine) 메모리 구조
    Programming Language/- Java 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/

    반응형

    댓글

Designed by Tistory.