성장일기

 앞서 [#4]장에서 자바 가상머신에 대해 정리 한 적이 있다. 정리하자면 1. 자바 가상머신은 운영체제 위에서 실행되는 하나의 프로그램이다. 2. 자바 프로그램은 자바 가상머신 위에서 실행되는 프로그램이다. 

 

 

 이후 자바 가상머신이 메모리를 관리하는 방법에 대해 정리하려고 한다.

메소드 영역
스택 영역
힙 영역

 위 그림에서 보이듯이 자바 가상머신은 메모리 공간을 크게 세 개의 영역으로 나눠서 관리한다. 간단하게 정리하면 다음과 같다.

  • 메소드 영역(Method Area) : 클래스의 바이트 코드, static 변수
  • 스택 영역(Stack Area) : 지역변수, 매개변수
  • 힙 영역(Heap Area) : 인스턴스

 

 

메소드 영역(Method Area)


 소스파일을 컴파일러가 컴파일 하면 생성되는, 자바 가상머신이 실행 가능한 코드를 바이트 코드라고 하며 이는 클래스파일에 저장된다. 이 바이트 코드도 메모리 공간에 존재해야 실행이 가능하다.

 

 

 

스택 영역(Stack Area)


 스택은 지역변수 매개변수가 저장되는 공간이다. 이 둘의 공통점은 중괄호로 구분되는 지역 내에서만 유요한 변수들이다. 이렇듯 지역변수와 매개변수는 선언되는 순간에 스택에 할당되었다가 자신이 할당된 영역을 벗어나면 소멸이 된다.

 

 

힙 영역(Heap Area)


 인스턴스는 힙 영역에 할당된다. 인스턴스는 소멸 시점과 소멸 방법이 지역변수와 다르기 때문에 스택이 아닌 힙이라는 별도의 영역에 할당한다.

public static void main(...){
	String str1 = new String("my String");
	String str2 = new STring("your String");
}

 위 코드에서 str1과 str2는 참조변수이자 지역변수이다. 따라서 이 둘은 스택에 할당된다. 그런데 인스턴스들은 힙 영역에 할당된다고 하였다. 따라서 그림으로 나타내면 아래와 같은 관계가 형성된다.

참조변수 str1에는 "my String"인스턴스의 주소값을 저장하는 형태로 참조하고있다. 

공유하기

facebook twitter kakaoTalk kakaostory naver band