ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JVM Memory Area
    JAVA 2023. 9. 8. 16:46

    JVM Architecture

    Class Loader

    JVM 내로 .class 파일들을 Load 하여 Loading된 클래스들을 Runtime Data Area에 배치한다.

     

    JVM Memory

    Runtime Data Area 라고도 하며 JVM이 OS에서 할당 받은 메모리 공간이다

     

    Execution Engine

    Runtime Data Area에 할당됭 ByteCode 를 실행하는 역할을 한다. Interpreter, JIT compiler, Garbage Collector 로 구성되어있다.

     

    Native Method Libraries

    실행에 필요한 C,C++로 이루어진 Native Libraries 이다.

     

    Native Method Interface (JNI)

    JVM이 Native Method Libraries 의 C/C++ library 를 호출할 수 있도록 해준다.

     

     

    Runtime Data Areas

    JVM 의 Runtime Data Areas 는 크게 5가지로 나뉜다.

    1. Method Area
    2. Heap Area
    3. Stack Area
    4. PC Register
    5. Native Method Stack

    Method Area

    클래스, 변수, Method, static 변수, 상수 정보 등이 저장되는 영역. 모든 Tread 가 공유한다. Method Area는 Logical concept 이다. Java8 이전에는 permgen의 부분이고, Java 8 이후에는 Metaspace 의 부분이다.

     

    Heap Area

    new 명령어로 생성된 인스턴스와 객체가 저장되는 구역이다. 모든 Thread가 공유한다. GC의 대상이 된다.

    Hotspot JVM 기준 Heap은 크게 Young Generation 과 Old Generation 으로 나뉜다.

     

    Java 8 이전에는 permgen 이라는 heap이 존재한다. permgen (Permanent Generation)은 메인 메모리 heap 과 구분되는 별개의 heap memory 이다. 이 permgen 의 기본 최대 사이즈는 32-bit JVM은 64MB, 64-bit JVM 은 82MB로 작다. Method area는 class 의 meta-data를 저장하고 실질적인 객체와 데이터는 permgen에 저장되는데, 이때 permgen의 사이즈를 초과하게 되면  java.lang.OutOfMemoryError: PermGen space 에러를 내게 된다. permgen 역시 full GC에 포함된다.

     

    Java 8 부터는 permgen 이 사라지고 Metaspace 가 Native Memory 에 생겼다. Metaspace의 부분인 method area 역시 더이상 heap 영역이 아니게 되었다. class의 meta-data 를 저장하는 method area는 native memory 의 Metaspace에 저장하고, 기존 permgen 에 저장하던 실질 객체들은 heap 영역으로 저장하게 되었다. 객체의 reference는 metaspace 에서 관리되고 참조를 잃은 heap의 static object는 GC 의 대상이 될 수 있다.

     

    Stack Area

    Method를 실행하기 위한 정보들이 저장된다. 메소드가 하나 호출될때 Frame 이라는 구조가 stack 구조에 생긴다. Frame 구조에는 크게 3가지 정보가 있다. 

    1. Local Variable Array (LVA)
    2. Operand Stack (OS)
    3. Frame Data (FD)

    LVA 는 Method 내의 지역 변수들을 담고 있는 배열이다. 인스턴스 Method 라면 0번 index 는 this 이다.

     

    OS 는 피연산자를 저장하는 stack이다. FD 는 constant pool resolution과 같은 symbolic references 등을 갖고있다.

     

    PC Register

    Program Counter Register 이다. 현재 실행되고 있는 명령어의 주소를 저장한다. multi thread 환경에서 다른 작업을 하고왔을때 이전에 수행하던 code 부터 이어하기 위함이다.

     

    Native Method Stack

    다른 언어 메소드 호출을 위해 할당된다.

    'JAVA' 카테고리의 다른 글

    Java와 일급 함수  (0) 2023.09.18
    Java Generic Compile 동작  (0) 2023.09.11
    Java 버전 별 ArrayList add 동작  (0) 2023.09.06
    Java Thread Safety 한 개발  (0) 2023.08.29
    Singleton 구현 기법  (0) 2023.08.27
Designed by Tistory.