본문

[2018.01.19] 31. 자바 메모리 구조

도입

이번 포스팅에서는 자바 가상머신의 메모리 영역에 대해 알아볼 예정이다.



메모리 영역의 구조

자바의 가상머신은 운영체제로부터 메모리 영역을 할당 받아 효율적으로 관리해야한다. 그렇기 때문에 아래와 같이 메모리 영역을 나눠 효율적으로 관리한다.

구분

설명

메소드 영역

 메소드의 바이트 코드, static 변수

스택 영역

 지역변수, 매개변수

힙 영역

 인스턴스 



메소드 영역

소스 파일이 컴파일되면서 생성되는 코드, 자바 가상머신이 실행할 수 있는 코드를 '자바 바이트코드' 라고 한다. 이러한 자바 바이트코드가 메모리에 저장되어 있어야 프로그램이 실행 가능하다.


자바 바이트 코드가 저장되는 곳이 메소드 영역이다. 그리고 static 변수도 메소드 영역에 저장된다.



스택 영역

메소드 내에서 유효한 변수들의 저장공간이다. 여기서 변수는 개발자가 선언한 변수와 해당 메소드가 return된 후 돌아갈 주소값 등도 포함된다.



힙 영역

생성된 인스턴스들의 저장공간이다. 

그리고 스택 영역의 변수가 힙 영역의 인스턴스를 참조하고(바라보고, 가르키고) 있다가 더이상 참조하지 않는다면 자바 가상머신의 가비지 컬렉션을 통해 인스턴스는 제거된다.


※ 가비지 컬렉션은 인스턴스가 참조되지 않을 때마다 실행되는 것은 아니다. 그렇게되면 가비지 컬렉션 호출만으로 많은 리소스를 사용하기 때문에 가비지 컬렉션 알고리즘에 따라 실행된다.



#자바 메모리 #자바 메모리 구조 #Java memory

공유

댓글