메서드 영역 (Method Area, Static Area)
- JVM 이 시작될 때 생성되는 공간으로 바이트 코드(.class)를 처음 메모리 공간에 올릴 때 초기화되는 대상을 저장하기 위한 메모리 공간
- JVM 이 동작하고 클래스가 로드될 때 적재되서 프로그램이 종료될 때까지 저장된다.
- 모든 쓰레드가 공유하는 영역이라 다음과 같이 초기화 코드 정보들이 저장되게 된다.
- Field Info : 멤버 변수의 이름, 데이터 타입, 접근 제어자의 정보
- Method Info : 메소드 이름, return 타입, 함수 매개변수, 접근 제어자의 정보
- Type Info : Class 인지 Interface 인지 여부 저장, Type 의 속성, 이름 Super Class 의 이름
힙 영역 (Heap Area)
- 메서드 영역와 함께 모든 쓰레드가 공유하며, JVM 이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 영역
- 참조형(Reference Type)의 데이터 타입을 갖는 객체와 인스턴스 변수, 배열 등은 Heap 영역에 데이터가 저장된다.
- 변수(객체, 객체변수, 참조변수)는 Stack 영역에서 Heap 영역에 저장된 실제 데이터의 참조값(메모리 주소)을 인스턴스화를 통해 받아옵니다.
- Java 나 Kotlin 을 이용하면 가비지 컬렉션(GC)이 Heap 영역에서 동적으로 할당됐던 메모리 중 필요 없게 된 메모리 객체(garbage)를 모아 주기적으로 제거한다.
스택 영역 (Stack Area)
- 기본 자료형(int, double, byte, long, boolean 등)을 생성할 때 저장하는 공간으로, 임시적으로 사용되는 변수나 정보들이 저장되는 영역
- 메소드 내에서 정의하는 기본 자료형에 해당되는 지역변수(매개 변수 및 블록문 내 변수 포함)의 데이터 값이 저장되는 영역
- 해당 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리에서 해제된다.
- LIFO(Last In First Out)의 구조를 갖고 변수에 새로운 데이터가 할당되면 이전 데이터는 지워진다.
- 메서드 호출 시마다 각각의 *스택 프레임(그 메서드만을 위한 공간)이 생성되고 메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장한다. 그리고 메서드 수행이 끝나면 프레임별로 삭제된다.
- 스택 프레임 : 메서드가 호출될 때마다 프레임이 만들어지고, 현재 실행중인 메서드 상태 정보를 저장하는 곳이다. 메서드 호출 범위가 종료되면 스택에서 제거된다. 스택 프레임에 쌓이는 데이터는 메서드의 매개변수, 지역변수, 리턴값, 연산시 결과값 등이 있다.
'안드로이드 > etc.' 카테고리의 다른 글
[CS] 캐시 (Cache) (0) | 2024.09.04 |
---|---|
[CS] CPU, 주기억장치(ROM, RAM(SRAM, DRAM), 보조기억장치(HDD, SDD) (0) | 2024.08.28 |
[CS] 가비지 컬렉션 (Garbase Collection, GC) (0) | 2024.08.27 |