JAVA의 Metaspace는 Stack과 Heap 과 어떤 연관이 있어?

KIM YONG GU·2023년 9월 15일
0

JAVA Knowledge

목록 보기
28/40

Java의 Metaspace는 Stack과 Heap과 직접적인 연관이 없는 메모리 영역입니다. Metaspace는 JVM(Java Virtual Machine) 내부에서 클래스와 메타데이터(메서드, 필드, 상수, 애노테이션 등의 정보)를 저장하는 데 사용되는 영역입니다.

Heap

Heap 메모리는 Java 객체 인스턴스와 배열을 저장하는 데 사용됩니다. 객체의 생명주기가 동적이고, 가비지 컬렉션을 통해 관리됩니다. 이는 런타임 중에 동적으로 할당되는 메모리 영역입니다.

Stack

Stack 메모리는 메서드 호출 스택(call stack) 및 지역 변수(local variables)를 저장하는 데 사용됩니다. 메서드 호출과 관련된 데이터 및 지역 변수의 값이 저장되며, 메서드 호출이 완료되면 해당 데이터가 스택에서 제거됩니다.

Metaspace

Metaspace는 클래스 로딩, 클래스 메타데이터, 클래스 코드 등을 저장하는 데 사용됩니다. 이는 클래스와 관련된 정보를 메모리에 로드하고 관리하는 영역으로, Java 8 이전에는 PermGen(Permanent Generation) 영역으로 알려진 곳이었습니다. PermGen은 고정 크기로, 클래스 로딩 및 언로딩과 관련된 문제로 인해 자주 문제가 발생했습니다. 그래서 Java 8부터는 PermGen 대신 Metaspace가 도입되었습니다. Metaspace는 Heap 영역에 속하지 않으며 독립적인 메모리 영역입니다.

따라서 Metaspace는 클래스와 클래스 관련 정보를 저장하는 데 사용되는 별도의 메모리 영역으로, Heap과 Stack과 직접적인 연관이 없습니다. Metaspace는 클래스 로딩 및 언로딩과 관련된 작업을 수행하며, PermGen과 같은 문제를 피하기 위해 자동으로 크기가 조절되는 특징을 가지고 있습니다.

profile
Engineer, Look Beyond the Code.

0개의 댓글