JVM Memory

uuuouuo·2022년 9월 2일
0

SPRING

목록 보기
8/8

📖 JVM 메모리 구조


1. Method(Static) Area

  • JVM이 읽어들인 클래스와 인터페이스 대한 런타임 상수 풀, 멤버 변수(전역), 클래스 변수(Static 변수), 생성자와 메소드를 저장하는 공간
  • 각 데이터는 Runtime Constant Pool 가짐

    Runtime Constant Pool

    • 메소드 영역에 포함되지만 독자적 중요성이 있음
    • 클래스와 인터페이스 상수, 메소드와 필드에 대한 모든 Reference 값들을 저장
    • JVM은 런타임 상수 풀을 통해 해당 메소드나 필드의 실제 메모리 상 주소를 찾아 참조
  • 명시적으로 null 선언 시 GC 대상

2. Heap Area

  • 동적으로 생성 된 객체 또는 배열 등을 저장하는 영역
  • new 연산자를 통해 생성한 객체
  • 객체가 더 이상 쓰지 않거나 명시적으로 null 선언 시 GC 대상

3. Stack Area

  • 메서드 호출 시 Stack 영역에 각각의 메서드를 위한 메모리 할당 됨
  • 각 메서드는 하나씩의 Stack을 가짐
  • 호출 된 메서드의 지역변수, 매개변수, 리턴 값 및 연산 값을 임시로 저장하는 공간
  • 사용이 끝나면 Stack 영역에서 해제
  • 선입후출(FILO) 구조
  • 기본(원시)타입 변수는 스택 영역에 직접 값을 가짐

4. PC Register

  • Program Counter
  • Thread가 생성될 때마다 생성되는 공간
  • 현재 실행되는 부분의 명령과 주소를 저장
  • 현재 실행되고 있는 명령이 종료되면 카운트 값을 증가시켜 다음 명령을 실행하게 함

5. Native Method Area

  • Java 외 언어(C, C++ 등)을 수행하기 위한 Stack 영역
  • 프로그램 도중 호출 된 메서드가 Native 방식을 사용하는 메소드 일 경우, 이 영역에 저장되어 처리

0개의 댓글