IT/Etc.

[Java] 메모리 구조

바다, 2024. 8. 19. 21:29
반응형
▶ 메소드 영역 (Static)
JVM이 읽어드린 클래스와 인터페이스, 상수(Primitive), 멤버변수, 클래스변수(Static) 생성자와 메소드 정보 저장
JVM 시작 시 생성, 프로그램 종료 또는 명시적 null 선언 시 까지, 모든 쓰레드에서 공유
GC 방법은 JVM 벤더마다 다름
 
▶  힙 영역 (Heap)
JVM이 데이터를 저장하기 위해 런타임에 동적으로 할당하여 사용
New 연산자로 생성된 객체와 배열 저장
힙 영역에서 생성된 객체와 배열은 스택 영역의 변수나 다른 객체의 필드에서 참조
참조하는 변수나 필드가 없다면 GC의 대상, 모든 쓰레드에서 공유
GC 방식은 JVM 벤더마다 다를 수 있음
- Young Generation:
      - 자바 객체가 생성되자 마자 저장, 시간이 지나 우선순위 낮아지만 Old 영역으로 이동
      - 이 영역에서 객체가 사라질 때, Minor GC 발생
- Old Generation:
      - Young 영역에 저장되었던 객체가 오래되어 이동한뒤 저장되는 영역
      - 이 영역에서 객체가 사라질 때, Major GC 발생 (Fulil GC)
- Permanent Generation:
      - 클래스 로더에 의해 로드되는 클래스, 메소드에 대한 메타정보 저장
      - 리플렉션을 사용하여 동적으로 클래스 로딩되는 경우 해당, Spring 이용 시 고려 필요
 
▶ 스택 영역 (Stack)
쓰레드 마다 하나씩 존재, 쓰레드가 시작될 때 할당
스택 구조로, 선입후출
메소드정보, 지역변수, 매개변수, 연산 중 발생하는 임시 데이터 저장
기본(Primitive)타입은 스택 영역에 직접 저장
참조 타입(객체) 변수는 힙 영역이나 메소드 영역의 객체 주소 가짐
- PC레지스터
    - 현재 수행중인 JVM 명령 주소 가짐
 
▶ Native Method Stack 영역
자바 외 언어로 작성된 네이티브 코드 위한 Stack
JNI(Java Native Interface)를 통해 호출되는 코드 수행하기 위한 스택
반응형