Home

Jeong-Yoon

08 Jan 2020

Java 메모리 구조(1)

Java 메모리 구조(1)

Static

  • 모든 Thread가 공유하는 Memory 영역
  • Method area, Class Area, Code Method 라고도 불린다.
  • Class, Interface, Method, Field, Static Field 등이 저장된다
  • JVM에서 읽어 들인 클래스와 인터페이스에 대한 런타임 상수 풀, 메소드와 필드, static 변수, 메소드 바이트 코드 등을 보관
  • JVM이 시작될 때 생성되어 프로그램 종료 시까지 사용된다


  • Field Information
    • 멤버변수의 이름, 데이터 타입, 접근 제어자에 대한 정보
  • Method Information
    • 메서드의 이름, 리턴 타입, 매개변수, 접근제어자에 대한 정보
  • Type Information
    • Type의 속성이 Class인지 Interface인지의 여부 저장
    • Type의 전체 이름(패키지명 + 클래스명)
    • Type의 Super Class의 전체 이름(단, Type이 Interface이거나 Object Class인 경우 제외)
    • 접근 제어자 및 연관된 interface의 전체 리스트 저장
  • Constant Pool(상수 풀)
    • Type에서 사용된 상수를 저장하는 곳(중복이 있을 시 기존의 상수 이용)
    • 문자 상수, 타입, 필드, Method의 Symbolic Reference(객체 이름으로 참조)도 상수풀에 저장
  • Class Variable
    • Static 변수
    • 모든 객체가 공유 할 수 있고, 객체 생성없이 접근 가능
  • Class 사용 이전에 메모리 할당
    • final class 변수의 경우(상수로 치환되어) 상수 풀에 값 복사

Runtime Constant Pool

  • static area에 포함되지만 독자적인 중요성을 띈다.
  • class 파일 constant pool 테이블에 해당하는 영역
  • 클래스와 인터페이스 상수, 메소드와 필드에 대한 모든 레퍼런스 저장
  • JVM은 런타임 상수 풀을 통해 해당 메소드나 필드의 실제 메모리상 주소를 찾아 참조

Til next time,
Jeong-Yoon at 00:00

scribble