- Java: .java → .class(바이트 코드)로 컴파일되고 JVM 위에서 실행
- Python(보통의 CPython): .py를 바이트 코드로(.__pycache__/.pyc) 바꾼 뒤, CPython 안의 파이썬 가상머신(PVM)이 그 바이트 코드를 인터프리터 루프로 실행
- 즉, JVM처럼 표준화된 외부 VM 위에서 도는 게 아니라, 인터프리터 자체 안에 VM이 들어있다고 보면 된다
Java: OS → JVM(HotSpot) → .class 바이트 코드(JIT 가능)
Python: OS → CPython(인터프리터 + PVM) → .pyc 바이트 코드(인터프리트)
JIT : Just-In-Time Compiler / 실행 직전에 코드를 컴파일하는 방식
구현별 차이
- CPython: 가장 일반적. C로 구현, GIL 존재.
- PyPy: JIT 포함 → CPython보다 빠를 때 많음.
- Jython: JVM 위에서 실행(파이썬 코드를 JVM 바이트 코드로).
- IronPython: .NET CLR 위에서 실행.
요약
- Java는 “JVM 위에서”, Python은 보통 “CPython(인터프리터 프로그램) 안의 VM에서” 돌아간다.
- Jython/IronPython 처럼 예외적으로 JVM/CLR 위에서 도는 파이썬도 있음
- CLR(Common Language Runtime) : .NET Framework의 핵심 실행 엔진
- "C#, VB.NET 같은 .NET 언어로 작성한 프로그램을 실제로 실행시키는 가상 머신" 역할
- 코드 실행
- C# 같은 .NET 언어는 먼저 IL(Intermediate Language, 중간 언어) 로 컴파일됨
- CLR이 IL 코드를 JIT(Just-In-Time) 컴파일러를 통해 기계어로 변환하고 실행
- 메모리 관리
- 자동으로 메모리 할당·해제
- Garbage Collection(GC) 기능으로 더 이상 쓰지 않는 객체 메모리 반환
- 예외 처리
- try-catch-finally 같은 예외 처리 로직을 통합적으로 관리
- 보안
- 코드 액세스 보안(Code Access Security)
- 타입 안전성(Type Safety) 검사
- 멀티 언어 지원
- C#, VB.NET, F# 등 다양한 언어를 동일한 런타임 환경에서 실행 가능
CLR의 주요 역할
Share article