** 개인 학습용으로 작성한 내용이니 정확하지 않을 수 있음 **
정의
JVM(Java Virtual Machine)이란 자바 프로그램의 실행 환경으로 자바로 작성한 코드를 해석하여 실행하는 별도의 프로그램입니다. 작성한 코드가 운영체제로부터 독립적이기 때문에 어느 운영체제서든 코드 실행이 가능하게끔 합니다.
JVM이 필요한 이유? 예를 들어 C언어로 작성 된 코드는 운영체제로부터 독립적이지가 않기 때문에 Windows에서 작성한 코드는 windows에서만 코드 작동이 가능했고 MacOS 에서 작성한 코드는 MacOS에서만 작동했습니다.
WINDOWS 프로그램으로 코드 작성 ➡️ OS ➡️ HARDWARE
MAC 프로그램으로 코드 작성 ➡️ OS ➡️ HARDWARE
즉, 각 운영체제별로 프로그램을 만들어야했습니다.
이러한 문제점을 해결하기 위해 자바 JAVA 가 만들어졌고, JVM이 설치되어 있다면 자바에서 작성한 코드를 어느 운영체제에서든 코드 실행이 가능합니다.
JAVA PROGRAM ➡️ JVM ➡️ OS ➡️ HARDWARE
** JVM이 자바 프로그램과 운영체제 사이 일종의 통역가(중개자) 역할을 수행한다고 생각하시면 됩니다. **
JVM은 각 운영체제별로 접합한 버전이 존재하며 Windows용 JVM, Mac OS용 JVM, Linux용 JVM 이 따로 존재 합니다.
JVM 구조

위 JVM 내부 구조 설명:
1. 자바로 작성한 코드는 .java라는 확장자로 저장이 됩니다
2. 컴파일러 javac 통해 .class라는 확장자를 가진 바이트 코드 파일로 변환을 해줍니다
3. JVM이 운영체재로부터 소스 코드 실행에 필요한 메모리를 항당 받습니다 = Runtime Data Area
- Runtime Data Area는 5가지 영역으로 구분되어 있습니다.
- Stack 은 자료구조의 일종으로 데이터를 저장하는 방식이 LIFO (Last In First Out)이므로 마지막에 담은 데이터를 먼저 꺼냅니다. 데이터 삭제 시에도 마지막으로 저장된 데이터를 먼저 지웁니다.
- Heap에는 객체, 인스턴스 변수, 배열이 저장되는 공간이며, JVM에는 단 한의 Heap 영역이 존재합니다.
4. 클래스 로더가 .class 파일을 JVM 내부로 불러들여 런타임 데이터 영역에 적재시킵니다
5. 로드가 된 후 Execution Engine(실행엔진)에서 런타임 데이터 영역에 적재 된 .class (바이트코드)를 실행시킵니다
- 실행엔진에서 두 가지 방식으로 바이트코드가 실행됩니다:
- 인터프리터(Interpreter)를 통해 코드를 한 줄씩 기계어로 번역하고 실행시킵니다.
- JIT Compiler(Just-In-Time Compiler)를 통해 바이트 코드 전체를 기계어로 번역하고 실행시킵니다.
- Garbage Collector은 JVM이 더 이상 사용하지 않는 메모리를 자동으로 해제하는 프로세서가 포함되어 있습니다.
'자바기초' 카테고리의 다른 글
[JAVA 기초] 변수, 상수, 리터럴, 타입(정수, 실수,논리,문자, String) (0) | 2023.03.12 |
---|---|
[자바 JAVA] 컬렉션 - 컬렉션 프레임워크 Collection Framework (0) | 2023.03.07 |
[자바 JAVA] 컬렉션 - 열거형 ENUM (0) | 2023.03.06 |