- Method Area , Class Area , Code Area , Static Area 라고 불린다.
- 클래스정보 (멤버변수의 이름) ,
변수정보 (데이터타입, 접근제어자정보) ,
메소드정보 (메소드 이름, 리턴타입, 피라미터, 접근제어자 정보) , static변수 ,
final class변수 ,
Constant pool (상수풀 : 문자상수, 타입, 필드, 객체참조가 저장됨)
등을 분류해서 저장한다.
- JVM이 동작해서 클래스가 로딩될 때 생성된다.
- new 키워드로 생성된 객체와 배열이 저장되는 영역.
- Method Area에 로드된 클래스만 생성이 가능하다.
- GC (Garbage Collection)의 주요 대상이 된다.
(Stack Area , Class Area도 대상이 된다.)
- 효율적인 GC를 위해 메모리 영역이 분리되어 있다.
(Eden , Survivor1,2 , Old)
- 런타임 시 할당된다.
👀 런타임
-> 컴파일타임 이후 프로그램이 실행되는 때
(0나누기 오류 , Null참조 오류 , 메모리 부족 오류)
- 지역변수 , 피라미터 , 리턴값 , 연산에 사용되는 임시값 등이 생성되는 영역.
- 메소드를 호출 할 때마다 개별적으로 스택이 생성되며, 종료 시 영역에서 해제된다.
- 컴파일타임 시 할당된다.
👀 컴파일타임
-> 소스코드가 기계어로 변환되어 실행가능 한 프로그램이 되는 과정.
(Syntax Error , 파일참조 오류 , 타입체크 오류 , 등등)
💡 고정영역
-> 프로그램이 실행되면 실행파일이 메모리에 로드된다.
-> 실행파일의 용량만큼 메모리를 사용한다.
-> 실행파일의 크기는 변할 수 없으므로, 이 영역의 크기는 고정 크기를 갖는다.
------------------------------------------------------------------------------
💡 동적영역
-> 프로그래머가 'new' 키워드를 사용해서 객체나 배열을 생성하면 사용된다. (힙영역)
-> 메소드가 호출되는 동안 사용될 파라미터와 지역변수가 생성된다. (스택영역)
-> 메소드가 종료되거나 객체가 더 이상 사용되지 않으면,
생성된 변수나 객체는 메모리에서 사라진다. 따라서 이 영역은 유동적인 크기를 갖게 된다.
1. 최초 실행 시, 고정영역에 실행파일만큼의 메모리를 점유한다.
2. 프로그램이 각종 동작을 수행하는 동안 동적영역을 사용한다.