본문으로 바로가기

[JAVA] JVM 메모리 구조

category Helloworld!/JAVA 2016. 6. 1. 23:01

JVM 메모리 구조는 용도에 따라 method area, call stack(호출스택), heap 인 3가지 주요영역으로 나뉨



1) 메서드 영역

- 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 저장한다.

- 이때 클래스의 클래스변수도 영역에서 함께 생성된다.


2) 힙

- 인스턴스가 생성되는 공간, 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성됨. 즉, 인스턴스 변수들이 생성되는 공간


3) 호출스택(call stack 또는 excution stack)

- 메서드의 작업에 필요한 메모리 공간을 제공

- 이 메모리에 메서드가 작업을 수행하는 동안 지역변수(매개변수도 포함)들과 연산의 중간결과 등을 저장한다.

- 메서드 작업을 마쳤을때 할당된 메모리 공간은 반환되어 비어진다

ex) 첫번째 메서드 수행중에 다른 메서드를 호출하게 되면, 첫번째 메서드의 바로 위에 두번째로 호출된 메서드를 위한 공간 마련.

이때 첫번째 메서드 수행은 멈추고 두번째 메서드 수행이 시작된다.

두번째 메서드 수행이 끝나 메모리가 반환되면 첫번째 메서드 수행.

첫번재 메서드 마저도 수행을 마치면 이 또한 호출스택에서 제거됨(완전히 비워진다)

즉, 호출 스택에 최 상위에 있는 메서드가 현재 실행중인 메서드이며 나머지는 대기상태에 있게 된다.