2.1 바이트코드(Bytecode, portable code, p-code)란?
바이트코드(Bytecode, portable code, p-code)는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진
표현법이다. 하드웨어가 아닌 소프트웨어에 의해 처리되기 때문에, 보통 기계어보다 더 추상적이다.
<aside>
💡 역사적으로 바이트코드는 대부분의 명령 집합이 0개 이상의 매개 변수를 갖는 1 바이트 크기의 명령 코드(opcode)였기 때문에 바이트코드라 불리게 되었다. 바이트코드는 특정 하드웨어에 대한 의존성을 줄이고, 인터프리팅도 쉬운 결과물을 생성하고자 하는 프로그래밍 언어에 의해, 출력 코드의 한 형태로 사용된다. 컴파일 되어 만들어진 바이트코드는 특정 하드웨어의 기계 코드를 만드는 컴파일러의 입력으로 사용되거나, 가상 컴퓨터에서 바로 실행된다.
</aside>
2.2 자바에서 바이트코드란?
자바 모토 중 하나의 "W.O.R.A.(Write once, run anywhere., 한 번 작성하면 어디서든 실행된다.)"를 구현하기 위해 JVM(Java Virtual Machine, 자바 가상 머신)
은 사용자 언어인 자바와 기계어 사이의 중간 언어인 자바 바이트코드를 사용한다. 이 자바 바이트코드가 자바 코드를 배포하는 가장 작은 단위이다.
특징
- 특정한 하드웨어가 아니라 JVM에서 작동하도록 만든 이진 코드이다.
- [ ] 자바 소스 코드를 컴파일하여 바이트코드를 생산한다. 반대로 바이트코드를 역컴파일하면 주석을 제외한 소스 코드의 대부분을 복원할 수 있다.
- 바이트코드는 중앙처리장치(CPU) 대신에 JVM에서 실행하도록 컴파일된다.
- [ ] 플랫폼에서 다양한 코드 해석 기법을 사용하기 때문에 가상 머신(Virtual Machine)은 프로그램 코드를 CPU가 읽을 수 있는 기계어로 변환한다.
- 사람들이 읽기 쉽도록 만들어진 소스 코드와 달리 바이트코드는 덜 추상적이며, 더 간결하고, 컴퓨터 중심적으로 돌아간다.
- [ ] 기계가 바로 실행할 수 있는 언어보다는 비교적 사람이 보기 편한 형태로 기술된 형태이다.
- 바이트코드는 변수의 접근 범위와 같은 의미 분석 단계의 결과를 부호화한다.
- [ ] 일반적으로 소스 코드를 직접 분석, 실행하는 것보다 더 좋은 성능을 보여 준다.