3

Dalvik VM が (バイトコードに関して) サポートしているもので、.class ファイルにないために現在使用されていないものはありますか?

たとえば、関数型言語 XYZ 用に独自の Source-to-DX コンバーターを作成する場合、.class ファイルは特定の状況下でのみテール コールをサポートしますが、完全なテール コールなどを実装できますか?

4

1 に答える 1

3

私は専門家ではありませんが、私が見る限り、答えはノーです。

次の 2 つのサイトには、Dalvik と JVM のオペコードが一覧表示されています。Dalvik がレジスタ ベースの VM であり、JVM がスタック ベースであるという事実は別として、オペコードはかなり似ています。

http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html

http://en.wikipedia.org/wiki/Java_bytecode

どちらも Java 言語を処理するように特別に調整されています (JVM の将来のバージョンでは、この制約を解除する提案がありますが)。

Java でのテール コールの最適化に関する問題の 1 つは、コール スタックがプログラムで実際に利用できることです (たとえばnew Throwable().getStackTrace()、Android にも存在する を介して)。VM がテール コールの最適化を行った場合、メソッドを適切に実装できるようにするために、「最適化して取り除いた」ものを記録する必要がありますgetStackTrace

于 2010-04-27T07:21:23.617 に答える