자바 가상머신은 운영체제로부터 할당받은 메모리 공간의 효율적인 사용을 위해 메모리 관리를 한다.
가상머신은 메모리 공간을 크게 세 개의 영역으로 나눈다.
메소드 영역 | 스택 영역 | 힙 영역 |
각각의 메모리 영역에는 다음의 데이터들을 저장한다.
메소드영역(method area) - 메소드의 바이트코드.static 변수
스택영역(stack area) - 지역변수,매개변수
힙 영역(heap area) - 인스턴스
메소드 영역
소스파일을 컴파일 할 때 생성되는 자바 가상머신에 의해 실행이 가능한 코드를 가르켜 '자바 바이트코드(bytecode)'라 한다.
이러한 바이트코드들도 메모리 공간에 저장되어 있어야 실행이 가능하다.
따라서 실행의 흐름을 형성하는 메소드의 바이트코드들은 메소드 영역에 저장된다.
그리고 static 으로 선언되는 클래스 변수도 이 영역에 할당이 된다.
메소드 영역은 클래스 정보를 처음 메모리 공간에 올릴 때 초기화 되는 대상을 저장하기 위한 메모리 공간이다.
스택 영역
스택은 지역변수와 매개변수가 저장되는 공간이다. 이 둘은 다음의 공통적인 특징이 있다.
"메소드 내에서만 유효한 변수이다" 스택은 프로그램의 실행과정에서 임시로 할당되었다가
메소드를 빠져나가면 바로 소멸되는 특성의 데이터 저장을 위한 영역이다.
지역변수와 매개변수는 선언되는 순간에 스택에 할당 되었다가,
자신이 할당된 메소드의 실행이 완료되면 스택에서 소멸이 된다.
힙 영역
인스턴스는 힙 영역에 할당이 된다. 그 이유는 인스턴스의 소멸방법과 소멸 시점이 지역 변수와는 다르기 때문이다.
참조타입의 지역변수가 스택에 할당되면 힙영역의 인스턴스와 참조관계를 형성하게된다.
인스턴스의 소멸 시기는 자바 가상머신이 결정한다. 인스턴스가 어떠한 참조변수도 참조하지 않는 상태가 되면
자바 가상머신은 해당 인스턴스를 소멸시킨다. 이러한 소멸기능을 가비지 컬렉션 (Garbage Collection)이라 한다.
'Java' 카테고리의 다른 글
Object 클래스의 메서드 clone / finalize (0) | 2017.02.25 |
---|---|
Object 클래스의 메서드 toString / equals (0) | 2017.02.25 |
예외클래스 정의 / throw / throws (0) | 2017.02.25 |
예외처리 try~catch /finally (0) | 2017.02.25 |
인터페이스 interface (0) | 2017.02.25 |