자바(Java)는 "Write Once, Run Anywhere" (한 번 작성하면 어디서든 실행된다) 라는 철학을 바탕으로 만들어졌습니다. C/C++처럼 특정 운영체제(OS)에 종속적인 기계어로 바로 번역되는 것이 아니라, 바이트코드(Bytecode, .class)라는 중간 언어로 한 번 번역되기 때문입니다.
이 바이트코드를 읽고 각 운영체제(Windows, Mac, Linux)가 알아들을 수 있는 언어로 실시간 통역을 해주는 가상의 컴퓨터가 바로 JVM(Java Virtual Machine)입니다.
한국인 개발자가 '자바어(Java)'로 책을 쓰면 컴파일러가 이를 세계 공용어인 '바이트코드(Bytecode)'로 번역합니다.
각 나라에 배치된 똑똑한 현지 통역사(JVM)들은 이 세계 공용어를 읽고, 즉석에서 미국인(Windows), 프랑스인(Mac), 일본인(Linux)이 알아들을 수 있는 현지어(기계어)로 읽어줍니다.
| 구성 요소 | 역할 설명 | 비유 |
|---|---|---|
| Class Loader | 하드디스크에 있는 .class 바이트코드를 읽어서 메모리(RAM) 위로 끌어올림 |
창고에서 번역본 원고를 꺼내 책상에 올리는 조수 |
| Execution Engine | 메모리에 올라온 바이트코드를 실제 CPU가 이해할 수 있는 기계어로 번역(인터프리터/JIT)하며 실행 | 현지인들에게 원고를 즉석에서 소리 내어 읽어주는 통역사 |
| Garbage Collector (GC) | 프로그램이 실행되면서 더 이상 사용하지 않는 쓰레기 메모리를 주기적으로 찾아서 자동 청소 | 책상에 다 읽고 버려진 종이들을 조용히 치워주는 청소부 |