221101 JVM 메모리 구조

니바지·2022년 11월 4일
1

🍁11월의 첫 시작도 상쾌하게 달려보자!!
~~비록 업로드는 11월 4일자지만...^^

오늘은 드디어 java의 실행절차를 배우게 되었다.


JVM이란?

JVM은 Java Virtual Machine의 약자로, 자바 가상 머신이라고 부른다.

자바와 운영체제 사이에서 중개자 역할을 수행하며, 자바가 운영체제에 구애 받지 않고 프로그램을 실행할 수 있도록 돕는다. 또한, 가비지 컬렉터를 사용한 메모리 관리도 자동으로 수행하며, 다른 하드웨어와 다르게 레지스터(Register) 기반이 아닌 스택 기반으로 동작한다.


JVM 메모리 구조

이제 JVM이 어떤 구조이고 어떻게 동작하는지 간단히 알아보자.

이는 자바프로그램 실행 단계를 도식화한 것이다.

자바 소스 파일은 자바 컴파일러에 의해서 바이트 코드 형태인 클래스 파일이 된다. 그리고 이 클래스 파일은 클래스 로더가 읽어들이면서 JVM이 수행된다.

(1) Class Loader

JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈. 런타임 시에 동적으로 클래스를 로드한다.

(2) Execution Engine

클래스 로더를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드들을 명령어 단위로 읽어서 실행한다.

(3) Garbage Collector

Garbage Collector(GC)는 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할을 한다. 이때, GC가 역할을 하는 시간은 언제인지 정확히 알 수는 없다.

(4) Runtime Data Area

JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다. 이 영역은 크게 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack로 나눌 수 있다.


Runtime Data Area

위에서 설명했듯이, Runtime Data Area는 다섯 가지 영역으로 나눌 수 있다.

이는 Runtime Data Area를 도식화한 것이다.

(1) Method area

모든 스레드가 공유하는 메모리 영역이다. 메소드 영역은 클래스, 인터페이스, 메소드, 필드, Static 변수 등의 바이트 코드를 보관한다.

(2) Heap area

모든 스레드가 공유하며, new 키워드로 생성된 객체와 배열이 생성되는 영역이다. 또한, 메소드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역이다.

(3) Stack area

메서드 호출 시마다 각각의 스택 프레임(그 메서드만을 위한 공간)이 생성한다. 그리고 메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장합니다. 마지막으로, 메서드 수행이 끝나면 프레임별로 삭제합니다.

최근에 호출한 메서드가 맨 위로 쌓이는 형식이며, 가장 맨 밑에 쌓이는 것이 main 메서드이다.

4. PC Register

스레드가 시작될 때 생성되며, 생성될 때마다 생성되는 공간으로 스레드마다 하나씩 존재한다. 스레드가 어떤 부분을 무슨 명령으로 실행해야할지에 대한 기록을 하는 부분으로 현재 수행중인 JVM 명령의 주소를 갖는다.

5. Native method stack

자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역입니다.


오늘은 이렇게 정리해보았다!!

java에 대해서 긴가민가한 부분들이 참 많았는데, 이렇게 구조적인 부분을 살펴보니 어떠한 원리로 움직이는 이해하기가 편리했다.

앞으로도 꾸준히 정진하여 기초가 탄탄한 프로그래밍을 할 수 있게 되면 좋겠다!! 👍😁👍

profile
N잡러를 꿈꾸는 코딩 학도의 우당탕탕 코딩 입문기🍳

2개의 댓글

comment-user-thumbnail
2022년 11월 4일

o( ̄▽ ̄)ブ

1개의 답글