Runtime Data Areas

akanana·2021년 9월 27일
0

JavaPerformance

목록 보기
3/9
post-thumbnail

🏐Rumtime Data Areas


Runtime Data Areas 는 JVM 을 위해 OS로 부터 할당받은 메모리 영역이다.

🏀PC Register


  • 1개의 thread 당 1개
  • thread 가 시작할 때 실행
  • Stack base 인 JVM 과 Register base 인 CPU 가 통신하기 위한 메모리 공간

    Stack base vs Register base

🏀JVM Stack


  • 1개의 thread 당 1개
  • thread 가 시작할 때 실행
  • 수행 정보를 기록하는 frame 을 저장
  • thread 당 1개이기 때문에 동기화 이슈등의 문제 x

🥎Local Variable Section


Parameter 변수를 저장

🥎Operand Stack


연산을 할 때 이용하는 stack 영역

🥎Frame Data


종료, 예외 처리시 이용하는 데이터

🏀Native Method Stack


  • JNI 수행 시 사용되는 stack
  • 최근에는 JVM Stack 과 일원화 되는 추세이다

    JNI(Java Native Interface)?
    JVM 이 C, C++, 어셈블리어와 같은 언어들로 작성된 라이브러리들을 호출 또는 호출 당하도록 하는 프레임 워크
    OS 와의 호환성을 위해 이용한다

🏀Method Areas


  • 모든 스레드가 이용
  • GC 의 타겟이 된다
  • Load 된 Type 을 저장하는 논리적 메모리
  • Type 의 bytecode, 변수, 상수, reference, method data 등을 저장한다

🥎Type Information


Type 에 대한 전반적인 정보.

  • full name
  • class or interface
  • public, abstract, final 등의 modifier
  • interface 인 경우 직접 link 되는 객체의 리스트

🥎Constant Pool


  • 모든 Constant 정보
  • type, field, method 로의 모든 Symbolic Reference
  • 배열의 경우 index 호출을 통해 접근한다.

🥎Field Information


  • 인스턴스 변수.
  • field type
  • field modifier (public, private, protected, static, final, volatile, transient)

🥎Method Information


  • constructor 을 포함한 모든 method
  • method name
  • return type
  • parameter count, type
  • method modifier (public, private, protected, static, final, syncronized, native, abstract)
  • method bytecode
  • stack frame 의 operand stack 및 local variable section 크기

🥎Class Variable


  • static 으로 선언 된 변수들
  • 모든 인스턴스에 공유 인스턴스 없이 직접 접근 가능
  • 메모리를 미리 할당받음
  • final class 일시 constant pool 에 값을 복사

🥎Reference to Class Class Loader


Class 가 어떤 Class Loader가 Load 하였는가에 대한 정보.

🥎Reference to Class Class


java.lang.class 를 생성

🏀Heap


  • 모든 스레드가 공유
  • gc 의 타겟
  • 정해진 구조가 없고, 각 Vendor 에서 독자적으로 구성

0개의 댓글