Давайте предположим, что вы вызываете только код операции как для виртуального, так и для статического.Давайте предположим, что во время компиляции у вас есть
Test {
public static void test(Test t) {
// static method
}
}
и где-то вызов этой статики с псевдобайтным кодом
push t
jmp Test.test(T)V
Теперь давайте предположим, что кто-то использует другой класс Test во время выполнения
Test {
public void test(Test t) {
// obj call
}
}
В этом случае jmp Test.test(T)V
все еще действует.Проблема в том, что это испортит стек.Два разных кода операции позволяют уловить время этой проблемы.