java Basic - JVM 메모리 구조

허상범·2021년 1월 20일
0

Software Engineering

목록 보기
3/8

오늘 작성할 글은 JVM 코어 구조와 관련된 내용이다. 코딩 자체와는 큰 상관은 없어보이지만 저장 구조를 이해하는 것도 재밌는 일이니 한번 써보려고 한다.


모든 자바 프로그램은 자바 가상 머신(JVM)을 통해서 실행된다. 자바 프로그램이 실행되면, JVM은 해당 프로그램을 실행시킨 컴퓨터의 운영 체제로부터 해당 프로그램을 수행할 수 있도록 필요한 메모리를 할당받는다. 이렇게 할당받은 메모리는 용도에 따라 다음 그림과 같이 구분하여 JVM에서 관리된다.

1. 메소드(method) 영역

메소드(method) 영역은 자바 프로그램에서 사용되는 클래스에 대한 정보와 함께 클래스 변수(static variable)가 저장되는 영역이다.

JVM은 자바 프로그램에서 특정 클래스가 사용되면 해당 클래스의 클래스 파일(*.class)를 읽어들여, 해당 클래스에 대한 정보를 메소드 영역에 저장합니다.

2. 힙(heap) 영역

힙(heap) 영역은 자바 프로그램에서 사용되는 모든 인스턴스 변수가 저장되는 영역이다. 예를 들어, 자바 프로그램의 특정 클래스 내에서 new 키워드를 사용하여 새로운 객체(인스턴스)가 생성되면, 해당 인스턴스의 정보를 힙 영역에 저장한다. 힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 인스턴스 정보를 할당한다.

3. 스택(stack) 영역

스택(stack) 영역은 자바 프로그램에서 메소드가 호출될 때 메소드의 스택 프레임이 저장되는 영역이다. JVM은 자바 프로그램에서 메소드가 호출되면, 메소드의 호출과 관계되는 지역 변수와 매개변수를 스택 영역에 저장한다.

이렇게 스택 영역에서는 특정 메소드의 호출과 함께 메모리가 할당되며, 메소드의 호출이 완료되면 소멸한다. 이렇게 스택 영역에 저장되는 메소드의 호출 정보를 스택 프레임(stack frame)이라고 한다. 스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출합니다. => LIFO 형태의 스택 머신

이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터, 즉 가장 나중에 저장(push)된 데이터가 가장 빠르게 인출된다.

스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.

profile
Engineering & Science, Since 2021 | Finance, Backend, Data

0개의 댓글