공식적으로 "바이트 코드"(Java가 아닌)는 없습니다. 단순히 "코드"입니다. Java 가상 머신 사양의 어디에서나 "바이트 코드"를 찾을 수 없습니다.
그러나 비공식적으로 Java 내 Java 메소드 정의의 "코드"속성에있는 가상 머신 "지침"에 적용되는 용어입니다. 클래스 파일. 그리고이 용어는 C++와 같은 다른 여러 언어의 가상 시스템 명령어에도 적용됩니다 ("엄격함"은 더 이상 없을 것입니다).
가상 머신 명령어의 개념은 일반적으로 UCSD Pascal의 "p- 코드"및 몇 가지 관련 초기 파스칼 언어 구현에서 비롯된 것으로 동의합니다. 기본적으로 컴파일러는 "intermediate language"형식이며 "virtual machine"으로 직접 해석 할 수 있습니다. 즉, 네이티브 컴퓨터 코드로 변환하기위한 추가 컴파일 단계가 필요합니다. 일반적으로 가상 머신 명령어 세트는 (가능한 한) "머신 독립적"으로 설계되며 특정 운영 체제 또는 하드웨어 명령어 세트에 한정되지 않습니다.
바이트 코드 명령어는 일반적으로 "stack architecture"에서 간단한 동작입니다. 스택 아키텍처는 컴파일하기 쉽고, "명령어"가 매우 간단하고 해석하기 쉬우 며 일반적인 컴파일러 시나리오에서 후속 최적화 및 코드 생성 단계에 편리한 "소스"이기 때문에 편리합니다. 주목할만한 예외는 안드로이드 Dalvik 가상 머신이며 명령어 세트는 스택 아키텍처가 아니라 레지스터 기반 아키텍처입니다.
Java에서 Java 프로그램은 처음에는 " JVM의 인터프리터에 의해 바이트 코드가 "실행"된다. 그런 다음 개별 메소드가 "핫"(많이 사용됨)으로 결정되면 개별 메소드가 "JITC (just-in-time compiler)"를 사용하여 "대상"하드웨어의 명령어 세트로 컴파일됩니다. 다른 언어 구현은 전적으로 해석되거나 컴퓨터 지침으로 즉시 번역 될 수 있습니다.
일반적으로 말하기 (용어는 사용자가 논의하는 특정 개발/실행 환경에 따라 달라집니다.) "객체 코드"는 컴파일되어 "객체 모듈"에있는 코드를 말합니다. 기계 명령어 및 재배치 정보 및 디버그 정보와 같은 다른 "지원"데이터가 포함됩니다. OTOH라는 "기계 코드"는 "객체 모듈"에서 "로드 된"기계 명령을 실행하기위한 적합한 위치로 참조합니다. –
[어셈블리 코드와 바이트 코드의 차이점은 무엇입니까?] (https://stackoverflow.com/questions/1782415/what-is-the-difference-between-assembly-code-and-bytecode) – roottraveller