Android Dalvik VMを勉強していますが、ファイルvm / mterp / out/InterpC-portable.cppのmterpコードを読んだときに質問があります。実際には、dexファイルのバイトコードを解釈するのはdalvikvmの主要なインタープリターループです。このファイルを作成した場合は、次のようにswitch-case構造を選択します。
while (hasMoreIns()) {
int ins = getNextIns();
switch(ins) {
case MOV:
//interprete this instruction
...
break;
case ADD:
...
break;
...
default: break;
}
}
ただし、mterpが使用するものは私の考えとは大きく異なり、次のような魔法のコード(私にとって)を使用します。
FINISH(0);
HANDLE_OPCODE(OP_NOP)
FINISH(1);
OP_END
HANDLE_OPCODE(OP_MOVE)
...
OP_END
...
私はそれをグーグルで検索し、それが変更された「スレッド」スタイルの実行であるように見えます。これは、switch-caseスタイルとは異なり、whileループの分岐操作を削除するためパフォーマンスが向上します。しかし、私はまだこのコードと、なぜそれがパフォーマンスに優れているのかを理解できません。インタプリタの次のコードをどのように見つけますか?