자바 메모리는 크게 Method Area, Stack, Heap의 세 영역으로 나뉜다.
메소드 영역(Method Area)
메소드 영역에는 정적 필드(Static)와 메소드(Method)가 저장된다.
- Static: 클래스 변수로써, 모든 인스턴스가 공유한다.
- Method: 클래스가 가진 메소드가 저장된다.
이 영역의 특징은 다음과 같다.
- 애플리케이션이 실행될 때 가장 먼저 할당된다.
- 한 번만 할당되며, 프로그램이 종료될 때까지 유지된다.
스택(Stack)
스택 영역에는 지역 변수, 연산의 중간 결과 등이 저장된다.
- Value: 실제 값이 저장된다.
- 연산: 연산의 중간 결과가 저장된다.
- 변수명: 지역 변수의 이름이 저장된다.
이 영역의 특징은 LIFO(Last In First Out) 방식으로 동작한다는 것이다.
힙(Heap)
힙 영역에는 객체와 생성자가 저장된다.
- 생성자: 객체를 생성하는 데 사용된다.
- 객체: 인스턴스가 저장된다.
이 영역의 특징은 가비지 컬렉션(Garbage Collection)에 의해 더 이상 참조되지 않는 객체가 정리된다는 것이다.
메모리의 특징
자바 메모리의 특징은 다음과 같다.
- 하위 클래스가 생성되기 전에 상위 클래스가 먼저 생성된다.
- 하위 클래스를 호출하면 상위 클래스의 메소드가 먼저 실행된다.
- 생성된 객체의 주소는 부모 객체의 주소와 같다.
- 클래스에 정의된 공개 메소드만 사용 가능하다.