JVM(Java Virtual Machine)은 운영체제로부터 메모리를 할당 받는다. 이 할당받은 메모리의 구조에 대한 글이다.
1.Heap 영역
- 실제로 생성된 객체(인스턴스)가 저장되는 영역.
- 런타임시 동적으로 할당한다.(객체가 생성되면 heap영역에 할당)
- 가비지 컬렉션의 대상이다.(Stack영역의 변수가 heap영역의 변수를 더이상 참조하지 않으면 가비지 컬렉션의 대상이 된다.)
- 모든 스레드가 공유한다.
2.Stack 영역
- 자바 프로그램에서 메소드가 호출될 때 메소드의 스택 프레임이 저장된다.
- JVM은 자바 프로그램에서 메소드가 호출되면, 메소드의 호출과 관계되는 지역 변수와 매개변수를 스택 영역에 저장한다
- 객체의 참조값이 저장됨. 실제 객체는 heap에 저장.
- 이렇게 스택영역에 저장되는 메소드 호출정보를 스택 프레임이라고 한다.
3.Method영역(클래스 영역,static영역)
- 자바 프로그램에서 사용되는 클래스에 대한 정보와 함께 static변수가 저장되는 영역이다.
- 클래스 구조, static변수, 상수 등의 정보가 저장됨
- 프로그램 시작 전에 로드되고 프로그램 종료시 소멸된다.
참조: https://www.devkuma.com/docs/jvm/memory-structure/