응용프로그램이 싱행되면 JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당 받는다.
이때, JVM은 이 메모리를 용도에 따라 영역을 나누어 관리한다.
JVM 메모리 구조는 stack 영역, heap 영역, method area (or class area) 영역으로 구성된다.
지역변수 (local variable) : 지역변수는 일시적으로 사용하기 위해 쓰는 변수로 메서드 또는 생성자 내에 선언된다.
stack 영역에 저장된다. stack영역은 메서드의 작업에 필요한 메모리 공간을 제공한다.
지역변수는 반드시 명시적인 초기화를 해야 사용할 수 있다.
해당 메서드 또는 생성자가 실행이 끝나면 메모리에서 해제가 된다.
인스턴스 변수 (instance variable) : 객체의 속성 정보를 저장한다.
인스턴스 변수는 heap 영역에 저장된다.
명시적 초기화 없이 선언만 하면 기본 초기화가 된다.
객체가 소멸되기 전까지 heap영역에 참조를 유지한다.
클래스 변수 (class variable) : 주로 package, class, method, static 정보를 저장한다.
method area 영역에 저장된다.
최초 class loading 시점에 메모리에 적재된다.
별도의 객체 생성없이 class명으로 사용이 가능하다.