Class Area ( Method Area, Code Area, Static Area) | - 클래스 정보(멤버 변수의 이름) - 변수 정보(데이터 타입, 접근 제어자 정보) - 메소드 정보(메소드 이름, 리턴 타입, 파라미터, 접근제어자 정보) - static 변수 - final class 변수 - Constant pool(문자 상수, 타입, 필드, 객체 참조가 저장됨) - 위의 데이터 들을 분류해서 저장 - JVM이 동작해서 클래스가 로딩될 때 생성 |
Heap | - new 키워드로 생성된 객체와 배열이 저장되는 영역 - Method Area에 로드된 클래스만 생성이 가능하다. - GC의 주요 대상이 된다.(Stack, Class Area도 대상이 된다.) - 효율적인 GC를 위해 메모리 영역이 분리되어 있다.(Eden, S urvivor1,2, Old) - 런타임시 할당 |
Stack | - 지역변수, 파라미터, 리턴값, 연산에 사용되는 임시값등이 생성되는 영역 - 메소드를 호출할 때마다 개별적으로 스택이 생성되며 종료 시 영역에서 해제된다. - 컴파일 타임 시 할당된다 |
PC Register | - 스레드가 생성될때마다 생성되며 현재 스레드가 실행되는 부분의 주소와 명령을 저장하는 영역 - 이를 이용해서 스레드를 돌아가면서 수행할 수 있게 함 |
Native Method Stack | - 자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역 (JNI) |
- 컴파일 타임 : 소스코드가 기계어로 변환되어 실행가능한 프로그램이 되는 과정
(Systenx Error, 파일참조오류, 타입체크오류등)
- 런타임 : 컴파일타임 이후 프로그램이 실행되는 때
(0나누기 오류, Null참조오류, 메모리부족오류)
참조
https://velog.io/@ditt/JavaJVM-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%81%EC%97%AD
[Java] JVM 메모리 영역
Runtime Data Area 및 메모리관련
velog.io