JVM 메모리 구조

MyeongJae Lee·2022년 1월 17일
0

JVM

method area

프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스(.class)를 읽어 클래스에 대한 정보를 method area에 저장한다. 클래스 변수(static)가 이 때 이 영역에 함께 생성된다.

heap area

인스턴스가 생성되는 영역이다. refernce type의 변수가 이 영역에 생성된 주소를 참조한다.

call stack(execution stack) area

메서드의 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면, 호출된 메서드를 위한 메모리가 이 영역에 할당된다. 메서드에 포함되어 있는 local variable과 메서드 parameter가 이 영역에 저장된다. 메서드가 종료될 때, 할당되었던 영역은 반환된다.

garbage collector

heap area에 생성되어 있는 인스턴스 중 참조되지 않는, 즉 더 이상 사용되지 않는 인스턴스들을 제거해준다. 언제 실행되는 지 정확히 알 수 없다. garbage collector가 실행되는 알고리즘이 있다고 한다.

class loader

클래스가 사용되면 JVM 내로 영역에 맞게 클래스 파일을 로드하는 역할을 한다.

execution engine

class loader를 통해 로드되어지고 각자의 영역에 배치된 바이트 코드들을 명려어 단위로 실행한다.

실행순서

java compiler가 자바파일(.java)을 compile하여 byte code(.class)로 만든다. 프로그램을 실행하던 중 A.class 파일이 필요하면, class loader가 A.class 파일을 load하여 runtime data area(method, call stack, heap)에 배치한다. execution engine은 배치된 class파일의 정보들을 명령어 단위로 읽어 프로그램을 실행한다. A.class 파일을 또 사용해야한다면 이미 runtime data area에 배치됐기때문에 execution engine이 동작한다.

profile
개발자가 하고싶어요

0개의 댓글