아이티-잉

공부하며 정리하는 IT블로그

Today   Total  
2023년! 복 많이 받으세요

자바가상머신(JVM; Java Virtual Machine)의 구조와 작업 수행 절차

2016. 4. 26. 11:30

자바가상머신 Java Virtual Machine

 

JAVA 프로그램
↓↑
JVM
↓↑
운영체제
↓↑
하드웨어

 

자바가상머신은 자바(Java)프로그램의 실행을 돕는 가상의 구조다.

운영체제와 자바 프로그램 사이에 존재하며, 메모리 및 스레드 관리를 해준다.

 

즉, 운영체제로 직접 연결되는 C/C++과 달리 Java는 JVM을 거치기때문에

상대적인 수행속도에서 뒤처지는 차이가 발생한다.

 

 

 


~ 광고 타임 ~


 

 

구조 및 작업흐름 Structure and Work flow

 

오랜만에 잘하지도 못하는 포토샵을 꺼내들고 그려봤다.

외부적 흐름부터 내부에 이르기까지 하나씩 살펴보도록 하자.

 

 

1) 외부적 External

 

응용프로그램에서 실행되는 작업 흐름으로, 좌측 박스에 해당한다.

Java source file은 자바로 프로그래밍한 xxx.java 파일을 말한다.

해당 파일에는 고급언어(Java)로 작성된 로직이 담겨있다.

 

컴파일러(Compiler)는 고급언어로 작성된 .java 파일을 Class 파일로 변환해준다.

Class파일은 고급언어가 아닌 바이트코드(Byte code)로 이루어진 파일이다.

고급언어가 사람을 위한 언어이듯, 자바 바이트코드는 JVM이 명령어를 이해할 수 있도록 한다.

 

 

 


~ 광고 타임 ~


 

 

2) 내부적 Internal

 

이제 JVM 내에서 실행되는 과정을 살펴보자.

상단 이미지의 우측 큰 박스에 해당한다.

 

 

2-1) Class Loader

앞서 번역된 Class 파일을 JVM으로 적재(Load)시키는 역할을 한다.

 

2-2) Execution Engine

Class Loader를 통해 적재된 Class 파일을 해석(Interpret)하는 기능을 한다.

 

 

2-3) Runtime Data Area

JVM의 가상 메모리 영역이며, 운영체제(OS)로부터 메모리 공간을 할당받게 된다.

그리고 이를 크게 5가지로 구분하여 관리하게 된다.

 

- PC Register

: PC는 Program Counter의 약자로, 프로세서 내에 있는 특수한 레지스터 메모리영역을 말한다.

이는 CPU가 명령을 처리하기 위한 다음 명령줄을 가리키는 기능을 수행한다.

앞서 운영체제의 인터럽트 포스팅에서 소개한 바 있다.

 

마찬가지로 JVM 내에서도 같은 역할을 수행하게 된다.

 

- Heap

: 객체(Object)를 저장하는 가상 메모리 공간이며, JVM의 *GC에 의해 동적으로 관리된다.

 

*가비지 컬렉션(Garbage Collection)

할당된 메모리 영역중에서 사용되지 않는 메모리 공간(쓰레기; Garbage)을 찾아서,

수집(Collection)하고 이를 반환하여 재사용 가능하도록 해주는 기능을 한다.

이는 가비지 컬렉터(Garbage Collector), 우리말로는 쓰레기 수집 또는 쓰레기 수집자라고도 한다.

 

가비지 컬렉션은 JVM의 가장 큰 특징으로, 메모리 누수(Leak)를 막고,

효율적인 메모리 관리를 자동적으로 돕는 굉장한 역할을 수행한다.

 

 

- JAVA Stack

: 스택(Stack)은 앞서 자료구조에서 포스팅한 바 있다.

이는 후입선출(後入先出; Last In First Out) 구조를 가지며,

각종 형태의 변수나 임시 데이터, 스레드나 메소드의 정보를 저장한다.

 

 

- Method Area

: 앞서 Heap 영역이 객체를 위한 공간이었다면, Method Area는 클래스 데이터(Class Data)를 위한 공간이다.

Heap과 마찬가지로 GC의 관리 대상에 포함된다.

 

상단 이미지에는 표기하지 않았으나,

이 공간에는 Runtime Constant Pool이라는 별도의 관리 영역도 함께 존재한다.

이는 상수(Constant) 자료형(Data type)을 저장하여 참조하고 중복을 막는 역할을 수행한다.

 

 


~ 광고 타임 ~


 

 

- Native method stack

: 자바(Java)가 아닌 다른 언어로 작성된 코드를 위한 공간이다.

이는 JNI(Java Native Interface)를 통해 바이트 코드로 전환하여 저장하게 된다.

 

 

 

 

마치며

 

자바의 명령어 수행과정과 JVM의 역할을 이해하고 구조를 기억한다면,

차후 자바 개발자로 성장할 때 큰 자산이 되지않을까 싶어서 정리해봤다.

 

 

 

 

참고자료

 

Artima / 위키 / GLiDerWiki / Cubrid / 오라클

 

 

끝.