JVM

Java Virtual Machine, 자바 프로그램을 실행하는 가상 컴퓨터입니다.

왜 필요한가

일반 프로그램:    소스코드 → 컴파일 → Windows용 실행파일
                                   → Mac용 실행파일
                                   → Linux용 실행파일
                          (OS마다 따로 컴파일 필요)

Java:           소스코드 → 컴파일 → .class (바이트코드)
                                       ↓
                              JVM이 각 OS에서 실행
                          (한 번 컴파일, 어디서든 실행)

구조

Java 소스코드 (.java)
        ↓ 컴파일
바이트코드 (.class)
        ↓
      JVM
   ┌───┴───┐
   ↓       ↓
Windows   Mac   Linux
 JVM      JVM    JVM

"Write Once, Run Anywhere" — 자바의 슬로건입니다.


JVM의 역할

역할설명
바이트코드 실행.class 파일을 해석하고 실행
메모리 관리힙, 스택 등 메모리 영역 관리
가비지 컬렉션안 쓰는 객체 자동 정리
JIT 컴파일자주 쓰는 코드를 기계어로 최적화

바이트코드란

// Main.java
public class Main {
    public static void main(String[] args) {
        int a = 1 + 2;
    }
}
// 컴파일 후 바이트코드 (javap로 확인)
iconst_1    // 1을 스택에
iconst_2    // 2를 스택에
iadd        // 더하기
istore_1    // 결과 저장

기계어도 아니고 소스코드도 아닌 중간 언어입니다. JVM이 이걸 읽고 실행합니다.

CSLOG에서 보기