CS/Java
Java의 메모리 영역은?
No-ah98
2023. 3. 6. 13:07
배경 & 질문 의도
- JVM 구조의 이해
답변
- 메소드, 힙, 스택, pc 레지스터, 네이티브 영역으로 구분됩니다.
- 메소드 영역은 클래스가 로딩될 때 생성되며 주로 static 변수가 저장됩니다.
- 힙 영역은 런타임시 할당되며 주로 객체가 저장됩니다.
- 스택 영역은 컴파일시 할당되며 메소드 호출시 지역변수가 저장됩니다.
- pc 레지스터는 스레드가 생성될 때마다 생성되는 영역으로 다음 명령어의 주소를 알고 있습니다.
- 네이티브 영역은 자바 외 언어로 작성된 코드를 위한 영역입니다.
- 힙과 스택은 같은 메모리 공간을 동적으로 공유하며, 과도하게 사용하는 경우 OOM 이 발생할 수 있습니다.
- 힙 영역은 GC 를 통해 정리됩니다.
키워드 & 꼬리 질문
- Method Area (Class Area)
- 클래스가 로딩될 때 생성됩니다.
- 클래스, 변수, 메소드 정보
- static 변수
- Constant pool - 문자 상수, 타입, 필드, 객체참조가 저장됨
- Stack Area
- 컴파일 타임시 할당됩니다.
- 메소드를 호출할 때 개별적으로 스택이 생성되며 종료시 해제 됩니다.
- 지역 변수 등 임시 값이 생성되는 영역
- Heap 영역에 생성되는 객체의 주소 값을 가지고 있습니다.
- Heap Area
- 런타임시 할당 됩니다.
- new 키워드로 생성되는 객체와 배열이 저장되는 영역
- 참조하는 변수가 없어도 바로 지워지지 않습니다. -> GC 를 통해 제거됨.
- Java : GC, 컴파일/런타임 차이
- CS : 프로세스/단일 스레드/멀티 스레드 차이
Reference)