NDM

[Java] 자바 동작 원리와 JVM 2편 : Runtime Data Area 본문

Java

[Java] 자바 동작 원리와 JVM 2편 : Runtime Data Area

ndm.jr 2022. 4. 28. 11:55

목차

  • Runtime Data Area
    • Prior Java 8
    • After Java 8

Runtime Data Area

  • 프로그램 수행을 위해 할당받은 공간. 자바 메모리 공간이라고도 불림


Method Area ( Java 8 이전 )

  • Non-Heap 공간. Permanent를 차지하는 공간으로, Method Area, Static Area 등으로 불림
  • 모든 Thread에 의해 공유되는 공간
  • 클래스와 인터페이스, Runtime Constant Pool, 멤버 변수, 클래스 변수, 생성자와 메소드의
    메타데이터를 저장하는 공간
  • 이 공간의 메타데이터를 이용하여 물리적인 메모리를 참조하게 됨
  • 클래스 파일의 바이트코드가 로드되는 공간
    • Permanent Generation
      • 클래스 정의, 구조, 필드, 메소드, 상수로부터 클래스 관련 데이터를 저장
      • MaxPermSize 사용하여 규제 가능
      • 공간이 부족할 경우 OOM(Out Of Memory) 발생
    • Code Cache
      • 컴파일 코드를 저장하는데 사용
      • HotSpot JVM JIT 컴파일러에 의해 처리되는 공간

Method Area ( Java 8 이후 )

  • Permaent Generation 영역이 사라지고 MetaSpace로 통합
    • JVM의 관리 -> OS의 직접적인 관리를 받게 됨
    • 기존의 JVM에서 관리되던 PermGen은 제한이 있었지만 OS에서 관리되며 제약이 사라짐
  • Permanent Generation에서 관리되던 기존의 데이터들
    • Class / Interface 메타데이터
    • Method / Variable 메타데이터
    • JVM, JIT 관련 데이터
    • Static Object , 변수, 상수 -> Heap에서 관리되도록 바뀜 -> Static도 GC의 대상이 됨

 


Stack Area

  • 메소드 호출 시마다 각각의 스택 프레임이 생성
  • 메서드 안에서 사용되는 데이터가 저장됨. (지역변수, 매개변수, 파라미터, 리턴값(임시값) )
  • 라이프 사이클 : 메소드 호출시부터 종료시까지
  • 각각의 Thread마다 별도로 사용. 공유되지 않음

PC Register

  • 현재 수행중인 JVM 명령어 주소를 갖는 공간
  • 각각의 Thread 마다 별도 생성
  • Thread 어떤 부분을 어떤 명령어로 실행할지에 대한 기록 저장

Native Area

 

  • JNI(Java Native Interface) 통해 호출되는 C/C++ 등의 코드를 수행하기 위한 스택
  • 네이티브 메소드의 매개변수, 지역변수 등을 바이트코드로 저장
  • 자바 언어 외의 메서드들이 저장되는 공간
  • 각각의 Thread마다 별도 생성

Heap Area

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

  • Eden
    • 새로 생성된 대부분의 객체 인스턴스가 처음 위치하는 영역
    • GC 의해 제거되고, 살아남은 객체들은 Survivor1 / Survivor2   하나로 이동
  • Survivor
    • 1,2   하나의 영역이  차게 되면 살아남은 객체는 비워진 또다른 Survivor 이동
    • 참조가 없는 객체들은 역시 GC 의해 제거됨
    • MinorGC : Eden / Survivor 영역  Young 영역에서 발생하는 GC
  • Old
    • Survivor 왔다갔다 하다가 끝까지 살아남은 객체들이 이동하는 공간
    • Old 보통 Young보다 크게 할당하며, GC 발생 빈도는 Young보다 적음
    • MajorGC : Old, Permanent 영역에서 발생하는 GC