본문 바로가기

JAVA

자바 메모리 영역

런타임 데이터 영역

1. 프로그램 카운터

  • 스레드 프라이빗 메모리
  • 현재 실행 중인 스레드의 '바이트코드 줄 번호'를 저장함

2. 자바 가상 머신 스택

  • 스레드 프라이빗 메모리
  • 지역 변수 테이블, 피연산자 스택, 동적 링크, 메서드 반환값 등의 정보를 저장
    • 지역 변수 테이블에 저장되는 데이터
      • 기본 데이터 타입 : bolean, byte, char, short, int, float, long, double 타입의 변수를 저장한다.
      • 객체 참조
      • 반환 주소 타입 : 바이트코드 명령어의 주소로 메서드 종료시 돌아가야할 주소를 저장한다.

3. 네이티브 메서드 스택

  • 네이티브 메서드를 사용할 때 사용하는 스택

4. 자바 힙

  • 모든 스레드가 공유
  • 객체 인스턴스를 저장하는 역할
  • 새로운 인스턴스에게 할당해 줄 힙 공간이 부족하고, 힙을 더이상 확장할 수 없는 경우에는 OutOfMemoryError를 던짐

5. 메서드 영역

  • 모든 스레드가 공유
  • 가상 머신이 읽어 들인 타입 정보, 상수, 정적 변수, JIT 컴파일러가 컴파일한 코드 캐시 등을 저장
  • 런타임 상수 풀
    • 가상 머신이 클래스를 로드할 때 클래스 버전, 필드, 메서드, 인터페이스 등 클래스 파일에 포함된 설명 정보에 더해 컴파일 타임에 생성된 다양한 리터럴과 심벌 참조를 런타임 상수 풀에 저장함.

6. 다이렉트 메모리

  • 가상 머신 런타임에 속하지 않는 메모리
  • java 1.4 에 NIO 가 도입되면서 힙이 아닌 메모리를 직접 할당하여 사용할 수 있게 되었음
  • 물리 메모리 한계를 넘어가서 확장을 시도하면 OutOfMemoryError 가 발생함
반응형

'JAVA' 카테고리의 다른 글

Checked Exception 과 Unchecked Exception  (0) 2023.06.21
AOP 용어 정리  (0) 2023.04.16
try-with-resource  (0) 2022.07.14
sum 에 wrapper class를 쓰면?  (0) 2022.05.03
도메인 주도 설계 - 1부 동작하는 도메인 모델 만들기  (0) 2022.04.19