
운영체제 위에 JVM이 올라가고, 그 JVM 만에 메모리 구조가 생긴다.
자바 메모리는 크게 다섯가지가 존재한다. 쓰레드별로 PC Register, JVM Stack, Native Method 가 존재하고 공통적으로 Method Area, Heap 이 존재한다.
- 각 쓰레드마다 하나씩 생성된다.
- 현재 수행 중인 JVM 명령의 주소 값이 저장된다.
- 각 쓰레레드마다 하나씩 생성된다.
- 함수 안에서 사용되는 값들(매개변수, 지역변수 리턴 값 등)이 저장되는 공간이다.
- 메서드가 호출될 때 LIFO로 마지막에 생성된 것이 가장 먼저 지워진다.
- 각 쓰레드마다 하나씩 생성된다.
- 자바 외 작성된 코드(C/C++)들이 저장되는 공간이다.
- JNI(Java Native Interface)라는 포준 규약을 제공한다.
- 모든 쓰레드에게 공유된다.
- new 명령어로 생성된 인스턴스와 객체가 저장되는 구역.
- 공간이 부족해지면 garbage collection이 실행된다.
- 모든 쓰레드에게 공유된다.
- 각 클래스 별로 전역변수, 정적변수, 메소드 정보들이 저장되는 공간이다.
Q 자바의 메모리 구조에 대해서 설명해보세요
자바 메모리 구조는 크게 5가지 영역으로 구분 되는데요.
우선 쓰레드마다 pc 레지스터 , JVM stack, Native Method Stack 이 있구요.
그리고 쓰레드 공통으로는 Heap과 Method Area이 있습니다
PC 레지스터는 현재 수행중인 JVM 명령어가 들어가있구요.
그리고 JVM Stack은 호출된 메소드의 매개변수, 지역변수, 리턴정보들이 저장됩니다.
Native Method Stack은 자바 외의 언어인 C나 C++ 같은 것들을 수행하기 위한 영역이구요.
Method Area는 클래스별로 전역변수, 정적변수, 메소드 정보들이 저장 되게 됩니다
마지막으로 Heap 영역에서는 이제 런타임 중에 생성되는 객체들이 동적으로 할당되는 곳 입니다