JVM의 메모리 구조
1. 메소드 영역 method area
- 프로그램 실행 중 어떤 클래스가 사용됨 -> JVM은 해당 클래스의 클래스 파일을 읽어서 분석 -> 클래스에 대한 정보 (클래스 데이터)를 메소드 영역에 저장
- 클래스의 클래스 변수도 이 영역에 함께 생성됨
2. 힙 heap
- 인스턴스가 생성되는 공간
- 프로그램 실행 중 생성되는 인스턴스는 모두 힙에 생성됨.
- 인스턴스 변수들이 생성되는 곳
3. 호출 스택 call stack
- 메소드 작업에 필요한 메모리 공간 제공
- 메소드 호출 -> 호출스택에 호출된 메소드를 위한 메모리 할당됨 -> 메모리는 작업을 수행하는 동안 지역변수들과 연산의 중간결과 등을 저장하는데 사용됨 -> 메소드가 작업을 마치면 할당되었던 메모리 공간이 반환되어 비어짐.
작동 방식
첫번째로 호출을 위한 메소드를 위한 작업공간이 호출공간의 맨 밑에 할당됨
-> 첫번째 메소드 수행 중 다른 메소드 호출
-> 첫번째 메소드 바로 위에 두번째 메소드를 위한 공간 할당됨
-> 첫번째 메소드는 수행을 멈추고 두번째 메소드 수행되기 시작
-> 두번째 메소드 수행 완료
-> 두번째 메소드를 위해 제공되었던 호출 스택의 메모리 공간 제거됨
-> 첫번째 메소드 수행 완료
-> 호출스택이 완전히 비워지게 됨