일반적으로 JIT를 디자인하는 방법에 대한 다양한 답변이있는 것과 마찬가지로이 질문에 대한 가능한 답변은 매우 다양합니다.
그러나 한 가지 예를 들자면 JVM을 고려해보십시오. 자바 바이트 코드는 실제로 디버깅/리플렉션 메타 데이터를 제외하고는 변수 이름을 전혀 포함하지 않습니다. 대신 컴파일러는 각 변수에 0에서 65535까지의 "인덱스"를 할당하고 바이트 코드 명령어는 해당 인덱스를 사용합니다. 그러나 VM은 원하는 경우 추가 최적화를 자유롭게 할 수 있습니다. 예를 들어 모든 것을 SSA 형식으로 변환 한 다음 기계 코드로 컴파일 할 수 있습니다.이 경우 변수는 결국 스택 프레임의 기계 레지스터 또는 고정 오프셋으로 변환되거나 완전히 최적화됩니다.
다른 예로 CPython을 생각해보십시오. 파이썬은 실제로 높은 수준의 유연한 특성 때문에 런타임에 변수 이름을 유지합니다. 그러나 인터 퍼터는 여전히 몇 가지 최적화를 수행합니다. 예를 들어, __slots__
속성이있는 클래스는 필드에 고정 크기 배열을 할당하고 동적 조회를 위해 name -> index hashmap을 사용합니다. 구현에 익숙하지는 않지만 로컬 변수와 비슷한 것을 수행한다고 생각합니다. 정상 로컬 변수 액세스 (리플렉션을 사용하지 않음)는 "컴파일"시간에 고정 오프셋으로 변환 될 수 있습니다. 그래서 짧은
,
에 대한 대답들이 미리 주소로 컴파일 된 변수는, 해시를 사용하거나 내가 완전히 뭔가를 놓치고 있습니까?
입니다.
프로그램의 개념 설계에 더 적합한 [Programmers Exchange] (http://programmers.stackexchange.com/)에서 더 궁금한 점이있을 것입니다. – Singular1ty
감사합니다. –
Nit : "JIT 해석기"는 모순입니다. JIT 컴파일러와 인터프리터는 종종 함께 패키지되지만 용어는 상호 배타적입니다. –