자바는 JVM을 통해 실행된다. 프로그램이 실행되면 JVM은 OS로부터 프로그램을 수행하는데 필요한 메모리(32MB ~ 256MB)를 할당 받는다.
Static영역 또는 클래스 영역이라고도 불린다.
클래스, 인터페이스 정보가 올라간다.
패키지 정보가 올라간다.
static 멤버들이 올라간다.
JVM이 시작될 때 클래스 로더에 의해 로드되며, 프로그램이 종료될 때까지 유지.
모든 스레드가 공유한다.
동적으로 생성된 인스턴스(객체)가 저장되는 영역이다.
new 키워드를 통해 생성된 객체가 올라간다.
참조 되지 않는 객체들은 GC에 의해 제거 된다.
자바 VM option을 통해 설정 할 수 있다.
모든 스레드가 공유한다.
Priveite type 변수들이 저장되고, 임시로 사용되는 변수, 데이터를 저장한다.
스레드 별로 할당한다.
메서드가 호출 될 때마다 메서드의 지역변수, 매개변수, 임시데이터가 저장된다.
메서드가 종료되면 pop()으로 늦게 들어온 데이터부터 지워진다.
LIFO방식이어서 메서드에서 메서드를 호출하면 마지막 메서드 정보부터 지워진다.
Personal Computer가 아니라 Program Counter의 PC다.
스레드 별로 할당한다.
현재 사용중인 JVM 명령어의 위치를 가르킨다.
다음에 실행할 JVM 명령어를 지정한다.
자바 코드가 아닌 다른 언어로 작성된 코드를 저장하는 공간.
JNI(java native interface)통해 호출.
C, C++등의 코드를 수행하기 위한 공간.
바이트 코드가 아닌 실제 실행되는 기계어로 작성된 프로그램 실행 시키는 영역.
한 줄평 : 메모리 구조에서 Heap 과 Stack은 동작원리도 잘 알아둬야 한다.
참고 -
https://www.youtube.com/watch?v=AWXPnMDZ9I0&ab_channel=%EC%9D%B4%EC%A0%95%EB%A1%9D
https://tape22.tistory.com/28