거의 모든 바이트 코드는 런타임시 스택에서 찾을 피연산자 유형을 알고 있습니다. 바이트 코드 검증자는 이러한 유형 만 실제로 발견된다는 것을 확인합니다 (모든 경로에 대해) 런타임에서 해석기가 예상 한 값을 올리면 모든 것이 잘되어야합니다.스택 엔트리가 int인지 long인지를 JVM이 어떻게 결정할 수 있습니까?
그러나 피연산자 유형을 알아야하는 몇 가지 지침이 있습니다. 일부 피연산자가 범주 2 인 경우 다른 양식을 갖는 'dup'바이트 코드 (long & double). 확인 중에는 이전 푸시 지침에서 long을 'long'유형과 'top'유형으로 푸시하여 long이 있음을 확인하는 의사 확인 유형을 사용하므로 쉽습니다 ('상단'도 찾음). .
하지만 런타임에서 어떻게 이것을 결정합니까?
모두 안녕하세요, 원래 질문에 "일부 'dup'바이트 코드"는 좀 더 구체적이어야합니다. 즉, 더 복잡한 'dup_x2', 'dup_2', 'dup2_x1'및 'dup2_x2' 스택에 무엇이 있는지에 따라 달라지며, long이나 double을 만나면 다른 일을 할 것입니다.
제 질문은 값이 1 항목 int 또는 2 값 long/double인지 여부에 따라 런타임에서 결정할 수있는 방법입니다. 덕분에
아마도 유형이 스택으로 푸시 되나요? 나는 여기서 추측하고있다. – ShellFish
"런타임에서 어떻게 이것을 결정합니까?" 그것은 int와 longs를 가진 작업을위한 별도의 명령어가있는 이유입니다. – yole
'DUP'는'long' 또는'double' 타입 ('DUP2' is)과 함께 사용되지 않습니다. – August