Learning
토픽 109 / 111·코드 실행 체계 (Code Execution Model)

바이트코드와 가상머신 (Bytecode & Virtual Machine)

바이트코드와 가상머신 (Bytecode & Virtual Machine)

바이트코드는 특정 하드웨어에 독립적인 중간 표현(IR)으로 가상머신(VM)이 해석·실행하는 이진 형태의 명령어 집합이며, 가상머신은 바이트코드를 실행하는 소프트웨어 기반 추상 컴퓨터

목적: 플랫폼 독립성(Write Once, Run Anywhere), 이식성, 보안(샌드박스), 언어 상호운용

특징: 하드웨어 독립적, 컴팩트한 표현, VM 위에서 실행, JIT/인터프리터 선택 가능

바이트코드 종류

  • Java 바이트코드: .class 파일, 스택 기반, JVM에서 실행, 200+ 명령어
  • CIL(Common Intermediate Language): .NET, 스택 기반, CLR에서 실행
  • WebAssembly(Wasm): 브라우저/서버, 스택 기반, 바이너리 포맷, 네이티브에 근접한 성능
  • Python 바이트코드: .pyc 파일, CPython VM, dis 모듈로 확인

가상머신 구조

  • 스택 기반 VM: 연산 시 스택 사용, 구현 간단, 코드 컴팩트 (JVM, CLR, CPython)
  • 레지스터 기반 VM: 가상 레지스터 사용, 명령어 수 적음, 빠름 (Lua VM, Dalvik)

주요 VM: JVM(Java/Kotlin/Scala/Clojure), CLR(C#/F#/VB.NET), V8(JavaScript), CPython(Python), Erlang BEAM(Erlang/Elixir)

장점: 플랫폼 독립, 보안(샌드박스), 메모리 관리(GC), 언어 상호운용, 동적 로딩

단점: 네이티브 대비 성능 오버헤드, VM 설치 필요, 메모리 사용, 시작 시간

비교: 스택VM(구현간단/코드작음/JVM) vs 레지스터VM(빠름/명령어적음/Dalvik)

연관: JIT, AOT, 컴파일러, 인터프리터, WebAssembly, GraalVM