오늘은 클래스로더에 이어서 Run-Time Data Areas에 대해 살펴보려고 한다!
대충 힙과 스택만 알고 있었었는데 이번 수업에서 정확하게 각 파트를 알 수 있어서 진심으로 기뻤다!!!!
5개의 큰 영역으로 나눠짐
PC Register - 스레드 별로 생성됨!, 실행중인 바이트 명령을 저장하는 영역!
Stack - 스레드 별로 생성되며 실행 관련 정보를 저장하는 영역(프레임 단위로 저장)
Native Method Stacks - 스레드 별로 생성되며 네이터브 코드 실행에 관한 정보를 저장하는 영역
이 아래 2개가 스레드 safe 하지 않은 영역임!
Heap - JVM실행시 생성되며, 모든 객체 / 인스턴스, 배열에 대한 메모리가 할당되는 영역
Method Area - JVM생성시 실행되며 클래스의 구조나 정보 등의 메타데이터를 저장하는 영역
PC Register -> 스레드 생성 / 실행시 명령의 주소를 저장하는 영역임!
핵심은 네이티브 메서드가 아닌 java 메소드 일때만 실행 명령의 주소를 저장!
Stack - 스레드 생성시 할당되며 프레임이 저장되는 영역!!
로컬 변수 저장과 메서드 호출 / 반환등과 같은 작업시 사용
허용된거 보다 큰 스택 필요시 StackOVerFlowError가 발생
Frame - 생성되는 메서드 관련 정보 저장단위이며 동적연결, 메소드 값 반환, 예외 처리등에 사용한다
위에가 하나의 Frame에 들어간 파라미터를 나눠서 보여주고 있다
Method Area - JVM 실행시 모든 스레드에게 공유되며 클래스 별 구조와 정보(메타데이터)를 저장하는 영역!
Heap - 모든 객체 인스턴스, 배열에 대한 메모리가 할당되는 데이터 영역
GC가 처리되는 영역이며 , 힙은 크기가 가변이 됨!
JVM 실행시
heap, Method Area
스레드 실행시
pc register, stacks, nativeMethod stacks
메서드 호출시 - Frame