JVM이란?
JVM은 "Java Virtual Machine"을 줄인 것으로 "자바를 실행하기 위한 가상 기계"라고 할 수 있으며 자바 가상 머신이라고 부른다. 그리고 자바와 운영체제 사이에서 중개자 역할을 수행하며 자바가 운영채제에 구애 받지 않고 프로그램을 실행할 수 있도록 도와준다.
자바 프로그램 실행 단계

그렇다면 이제는 JVM이 어떻게 동작하는지와 구조에 대해 알아보자.
JVM의 구조는 크게 Class Loader, Exceution Engine, Runntume Data Area, Garbage Collector로 4가지로 나눌 수 있다. 밑에 그림은 JVM의 메모리 구조이다.
JVM의 메모리 구조

Class Loader
JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다. 런타임 시에 동적으로 클래스를 로드한다.
Exceution Engine
Class Loader를 통해 JVM 내의 Runtime Data Area의 Method Area에 배치된 바이트 코드들을 명렁어 단위로 읽어서 실행한다. JVM은 Method Area의 바이트 코드들을 Excetion Engine에 제공하여 Class에 정의된 내용대로 바이트 코드를 실행시킨다.
Garbage Collector
Garbage Collector(GC)는 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할을 한다. 이때, GC가 역할을 하는 시간은 언제인지 정확히 알 수 없다.
Runtime Data Area
JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.
이 영역은 크게 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack로 나눌 수 있다.
이제 한 단계 더 들어가서 Runtime Data Area에 대해서 알아보자.

1.메소드 영역(Method Area)
프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)를 읽어서 분석하여 클래스에 대한 정보를 이곳에 저장한다. 즉 클래스 정보, 인터페이스, static 변수, 변수 정보, 메소드 정보 등을 저장한다.
2.힙 영역(Heap Area)
인스턴스가 생성되는 공간(new 키워드로 생성된 객체와 배열이 생성되는 영역), 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 즉 인스턴스 변수들이 생성되는 공간이다. 또한 Garbage Collector 가 참조되지 않는 메모리를 확인하고 제거하는 영역이다.
3.스택 영역(Stack Area)
메소드 호출 시에 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 등 연산 시 일어나는 값들을 저장하는 영역이다. 메서드의 수행이 끝나면 제거된다.
4. PC Register
쓰레드가 시작될 때 생성되며, 생성될 때마다 생성되는 공간으로 쓰레드마다 하나씩 존재한다. 쓰레드가 어떤 부분을 무슨 명령으로 실행해야할 지에 대한 기록을 하는 부분으로 현재 수행중인 JVM 명령의 주소를 갖는다.
5. Native method stack
자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역이다.
'Language > Java' 카테고리의 다른 글
| [Java] 형변환(캐스팅, casting) (0) | 2022.09.14 |
|---|---|
| [Java] 자바의 명명규칙 (0) | 2022.09.13 |
| [Java] Queue(큐) 클래스 정리 (0) | 2022.09.08 |
| [Java] 자바 Static 이란? (1) | 2022.09.08 |
| [Java] 오버로딩(Overloading)과 오버라이딩(Overriding)의 차이점 (0) | 2022.09.08 |