JVM 메모리구조는 크게 메서드 영역, 스택 영역, 힙 영역
- 자바 프로그램이 실행되면 JVM은 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라서 여러 영역으로 나누어 관리
- 각 데이터 타입(자료형)에 따라 각 영역에 나눠서 할당
메서드 영역
- JVM이 동작해서 클래스가 로딩될 때 생성
- JVM이 읽어들인 클래스와 인터페이스에 대한 런타임 상수 풀, 멤버 변수(필드), 클래스 변수(static 변수), 상수(final), 생성자(constructor)와 메서드 (method) 등을 저장
- 메서드 영역에 있는 것은 어느 곳에서나 접근 가능
- 메서드 영역의 데이터는 프로그램의 시작부터 종료까지 메모리에 사라지지 않고 남아있어, 그 데이터들은 프로그램이 종료될 때까지 어디서든 사용가능
스택 영역
- 기본 자료형, 지역변수, 매개변수가 저장되는 메모리
- 메서드 내부의 기본 자료형에 해당하는 변수 적재
- Heap 영역에 생성된 데이터의 참조값이 할당됨
- 메소드가 호출될 때 메모리에 할당, 메서드 종료시 메모리에서 삭제됨.
- 자료구조 Stack의 구조, LIFO(Last In First Out)
힙 영역
- JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 시 동적으로 할당하여 사용하는 영역 참조형(Reference Type) 데이터 타입을 갖는 객체(인스턴스), 배열 등이 저장 되는 공간
- 단, Heap 영역에 있는 오브젝트들을 가리키는 레퍼런스 변수는 stack에 적재