2013-07-07 2 views
0

바이트 코드는 어셈블리 코드와 기계 코드 사이의 중간 코드 형태입니까? 그리고 바이트 코드는 객체 코드와 동일합니까?바이트 코드 란 정확히 무엇입니까?

이 내가 무슨 생각입니다 - 높은 수준 language-> 어셈블리 language-> 기계 코드/오브젝트 코드 (0과 1 다른 CPU에 따라 다릅니다.)는 다음과 같이

인가? 높은 수준의 언어 -> 어셈블리 언어 -> 바이트 코드 (기계 코드로 변환됩니다) -> 기계 코드

이 글은 - SO- bytecode vs assembly language code이지만 이해할 필요가 있습니다. 더 좋음

+0

일반적으로 말하기 (용어는 사용자가 논의하는 특정 개발/실행 환경에 따라 달라집니다.) "객체 코드"는 컴파일되어 "객체 모듈"에있는 코드를 말합니다. 기계 명령어 및 재배치 정보 및 디버그 정보와 같은 다른 "지원"데이터가 포함됩니다. OTOH라는 "기계 코드"는 "객체 모듈"에서 "로드 된"기계 명령을 실행하기위한 적합한 위치로 참조합니다. –

+0

[어셈블리 코드와 바이트 코드의 차이점은 무엇입니까?] (https://stackoverflow.com/questions/1782415/what-is-the-difference-between-assembly-code-and-bytecode) – roottraveller

답변

4

바이트 코드는 VM 용 명령어 세트에 불과합니다. 이것의 구현은 기계 코드에 JIT를 포함 할 수도 있고 포함하지 않을 수도 있습니다. 흔히 그렇지 않습니다. 예를 들어 공식 Lua 구현은 바이트 코드를 기계어 코드로 변환하기보다는 해석합니다. .NET 및 Java 구현은 거의 항상 효율적인 실행을 위해 컴퓨터 코드에 "핫 경로"를 컴파일합니다. 궁극적으로 이것은 VM 구현 세부 사항이며 바이트 코드 자체와는 아무런 관련이 없습니다. 이것은 VM 용 지침입니다.

오브젝트 코드 AFAIK는 항상 기계어입니다.

-1

예, Bytecode은 사전 머신 코드입니다. 가상 런타임에주의를 기울여 기계 코드로 변환됩니다 (0/1로). 자바의 경우에는 bytecode이고, .NET의 경우에는 IL/CIL입니다.

는 P 코드 (코드 휴대용) 소프트웨어 인터프리터에 의해 효율적으로 수행하기 위해 설계된 명령어 세트의 형태이다라고도 Here

바이트 코드로부터 카메라. 사람이 읽을 수있는 소스 코드와 달리 바이트 코드는 숫자 코드, 상수 및 참조 (일반적으로 숫자로 된 주소) 으로 프로그램 객체의 유형, 범위 및 중첩 깊이와 같은 구문 분석 및 의미 분석을 인코딩합니다. 따라서 은 소스 코드를 직접 해석하는 것보다 훨씬 나은 성능을 제공합니다.

+0

Qbasic을 사용할 수 있습니까? 뭔가있어? 통역관 이니까요? –

+0

누가 그것을 downvoted 사람 - 이유를 설명 신경? –

+0

(누군가 내가 downvote 이유를 묻기 때문에 나는 downvote로 알려져 있었지만) 아니 었습니까. 그러나 바이트 코드가 기계어 코드로 변환되는 것은 보편적으로 사실이 아닙니다. –

1

자바 플랫폼 : 높은 수준의 언어 -> 바이트 코드 바이트 코드가 같은 JVM

으로 VM에 의해 실행되는

닷넷 플랫폼 : 높은 수준의 언어 -> CIL (공통 중간 언어) --- JIT (Just in time compile) ---> 기본 시스템 코드

기본 컴파일 : 상위 레벨 언어 -> 오브젝트 코드 (원시 기계 코드) -> 실행 가능 (원시 기계 코드)에 링크 링크 중 변수 사이의 주소 참조를 수정합니다. r 가지.

1

공식적으로 "바이트 코드"(Java가 아닌)는 없습니다. 단순히 "코드"입니다. Java 가상 머신 사양의 어디에서나 "바이트 코드"를 찾을 수 없습니다.

그러나 비공식적으로 Java 내 Java 메소드 정의의 "코드"속성에있는 가상 머신 "지침"에 적용되는 용어입니다. 클래스 파일. 그리고이 용어는 C++와 같은 다른 여러 언어의 가상 시스템 명령어에도 적용됩니다 ("엄격함"은 더 이상 없을 것입니다).

가상 머신 명령어의 개념은 일반적으로 UCSD Pascal의 "p- 코드"및 몇 가지 관련 초기 파스칼 언어 구현에서 비롯된 것으로 동의합니다. 기본적으로 컴파일러는 "intermediate language"형식이며 "virtual machine"으로 직접 해석 할 수 있습니다. 즉, 네이티브 컴퓨터 코드로 변환하기위한 추가 컴파일 단계가 필요합니다. 일반적으로 가상 머신 명령어 세트는 (가능한 한) "머신 독립적"으로 설계되며 특정 운영 체제 또는 하드웨어 명령어 세트에 한정되지 않습니다.

바이트 코드 명령어는 일반적으로 "stack architecture"에서 간단한 동작입니다. 스택 아키텍처는 컴파일하기 쉽고, "명령어"가 매우 간단하고 해석하기 쉬우 며 일반적인 컴파일러 시나리오에서 후속 최적화 및 코드 생성 단계에 편리한 "소스"이기 때문에 편리합니다. 주목할만한 예외는 안드로이드 Dalvik 가상 머신이며 명령어 세트는 스택 아키텍처가 아니라 레지스터 기반 아키텍처입니다.

Java에서 Java 프로그램은 처음에는 " JVM의 인터프리터에 의해 바이트 코드가 "실행"된다. 그런 다음 개별 메소드가 "핫"(많이 사용됨)으로 결정되면 개별 메소드가 "JITC (just-in-time compiler)"를 사용하여 "대상"하드웨어의 명령어 세트로 컴파일됩니다. 다른 언어 구현은 전적으로 해석되거나 컴퓨터 지침으로 즉시 번역 될 수 있습니다.

관련 문제