[Java] 자바 메모리구조

Chloe Choi·2021년 4월 11일
0

Java

목록 보기
5/5

Runtime Data Area

프로그램 실행 시 OS로부터 할당받는 메모리로 JVM 내 위치

구성

Method area

Class Loader가 적재한 클래스에 대한 메타 정보 저장

  • Type Information
  • Field Information
  • Method Information
  • Class Variable(static)
    -> 클래스 사용전 미리 할당
    if primitive type -> 여기에 저장
    else -> 여기엔 reference만, 실제 인스턴스는 Heap에 저장
  • Runtime Constant pool
    상수, 메소드, 필드에 대한 reference를 저장하는 constant-pool table 역할
    -> JVM은 이를 이용해 실제 미모리 상 주소를 찾음

이 영역 내 값은 JVM이 시작되면 할당되어 프로그램 종료나 명시적 null 선언 시 해제된다

Heap area

런타임 시 동적으로 할당해 사용하는 영역(by new 연산자)

여기 저장된 데이터를 다른 곳에서 참조해 사용한다
만약 not reachable이면 GC 대상이 된다!

이 영역 내 값은 객체 생성 시 할당되고 not reachable이거나 명시적 null 선언 시 해제된다

Stack area

Thread의 Method가 호출될 때 수행정보를 저장하는 영역

수행정보?

  • frame 단위
  • 메소드 호출주소, 매개변수, 지역변수 등 임시정보를 저장
  • method 호출 시 frame push,
    method 종료 시 frame pop하는 LIFO 구조

if primitive type -> 여기에 저장
else -> 여기엔 reference만, 실제 인스턴스는 Heap 또는 Method에 저장

PC registers

현재 수행중인 JVM 명령주소 저장 영역

Native Method Stack

Java 외 언어로 작성된 네이티브 코드를 위한 Stack

따라서, 실행중인 프로그램 내 여러 스레드가 존재한다면 다음과 같은 메모리 구조를 갖게된다

ref.

https://jithub.tistory.com/40

profile
똑딱똑딱